RE: [tcltk-perl] Package Img
Brought to you by:
hobbs
From: Jeff H. <je...@Ac...> - 2004-09-03 23:08:07
|
The following is a working translation of the Tcl doodle code. There are others ways to express some of this stuff, but this works: #!/usr/bin/perl use Tcl::Tk qw/:perlTk/; my $mw = MainWindow->new(); my $c = $mw->Canvas(-background => "white") ->pack(-fill => 'both', -expand => 1); our $id; doodle($c); MainLoop; sub doodle { my ($w, $color) = @_; my $color = "black" unless defined $color; Tcl::Tk::bind($w->interp, $w, '<1>', [\&doodle_start, Tcl::Ev('%x', '%y'), $w, $color]); Tcl::Tk::bind($w->interp, $w, '<B1-Motion>', [\&doodle_move, Tcl::Ev('%x', '%y'), $w]); # bind $w <1> [list doodle'start %W %x %y $color] # bind $w <B1-Motion> {doodle'move %W %x %y} } sub doodle_start { my ($x, $y, $w, $color) = @_; $id = $w->create('line', $x, $y, $x, $y, -fill => $color); # set ::_id [$w create line $x $y $x $y -fill $color] } sub doodle_move { my ($x, $y, $w) = @_; my @coords = $w->coords($id); unshift @coords, $x, $y; $w->coords($id, @coords); # $w coords $::_id [concat [$w coords $::_id] $x $y] } Jeff Hobbs, The Tcl Guy http://www.ActiveState.com/, a division of Sophos > -----Original Message----- > From: Paul Falbe [mailto:fa...@ca...] > Sent: Thursday, September 02, 2004 8:52 AM > To: Jeff Hobbs > Cc: tcl...@li... > Subject: Re: [tcltk-perl] Package Img > > > > here is my simplistic attach at bind to canvas. I Can't get it to > for for "<1>". > > #!/usr/bin/perl > > use Tcl::Tk qw/:perlTk/; > my $MW = MainWindow->new(); > my $C = $MW->Canvas(-height => '100', > -width => '100' )->pack(-fill => 'both'); > my $f = $C->Frame->pack; > my $c =$f->Canvas(-width => '100', > -height => '100', > -highlightthickness => 0, > -background => "#ffffff")->pack; > $c->bind('canvas', '<1>', \&foo); > > MainLoop; > > sub foo { > print "foo\n"; > } > > On Thu, Sep 02, 2004 at 08:20:14AM -0700, Jeff Hobbs wrote: > > Paul Falbe wrote: > > > > >Would you happen to have a example of a scribble program > using perl Tcl/TK? > > > > Not in Perl Tcl::Tk, but this is so simple the translation should > > be easy: > > > > From http://wiki.tcl.tk/9625 > > > > proc doodle {w {color black}} { > > bind $w <1> [list doodle'start %W %x %y $color] > > bind $w <B1-Motion> {doodle'move %W %x %y} > > } > > proc doodle'start {w x y color} { > > set ::_id [$w create line $x $y $x $y -fill $color] > > } > > proc doodle'move {w x y} { > > $w coords $::_id [concat [$w coords $::_id] $x $y] > > } > > pack [canvas .c -bg white] -fill both -expand 1 > > doodle .c > > bind .c <Double-3> {%W delete all} > > > > Anyone undertaking the exercise should post it back here for > > others to see the translation. > > > > -- > > Jeff Hobbs, The Tcl Guy > > http://www.ActiveState.com/, a division of Sophos > |