canvas .c -width 400 -height 500 -bg white \ -xscrollcommand [list .hscroll set] \ -yscrollcommand [list .vscroll set] scrollbar .hscroll -orient horizontal \ -command [list .c xview] scrollbar .vscroll -orient vertical \ -command [list .c yview] grid .c .vscroll -sticky news grid .hscroll -sticky ew grid columnconfigure . 0 -weight 1 grid rowconfigure . 0 -weight 1 # Die beiden Linien mit Pfeil-Ende .c create line -100 0 1100 0 -fill red -arrow last -tags coord .c create line 0 400 0 -1100 -fill red -arrow last -tags coord .c configure -scrollregion {-100 -1100 400 1100} # Skalieren set scale 0.4 .c scale coord 0 0 $scale $scale .c configure -scrollregion [.c bbox all] # Balken set item [.c create polygon 440 800 560 800 530 270 470 270 \ -fill seagreen2 -outline seagreen4 -tags umr1 ] .c scale $item 0 0 $scale -$scale # Ein Knoten .c create rectangle 430 790 450 810 -tags {node umr1} \ -fill seagreen2 -outline seagreen4 .c scale node 0 0 $scale -$scale # Ein Kurvenstück set item [.c create line 400 60 400 100 450 140 500 140 \ -smooth true -fill seagreen4 ] .c scale $item 0 0 $scale -$scale # Etwas Text .c create text 100 -100 -text "Drucken mit ^p" # Ausgabe der Koordinaten proc koords {x y} { set x [expr {[.c canvasx $x]/$::scale}] set y [expr {-[.c canvasy $y]/$::scale}] puts stdout "x: $x\ty: $y" } bind .c {koords %x %y} # Selektieren proc deselektieren {} { .c itemconfigure umr1 -outline green4 -fill green2 .c bind umr1 selektieren } proc selektieren {} { .c itemconfigure umr1 -fill firebrick1 -outline firebrick4 .c bind umr1 deselektieren } .c bind umr1 selektieren # Drucken des sichtbaren Bereiches proc drucken {} { puts stderr "Drucke Postscript canvas.ps" set fd [open canvas.ps w] puts $fd [.c postscript ] close $fd } bind . drucken