use strict; use Tk qw( Ev ); my $m = MainWindow->new(); my $c = $m->Canvas->pack( -expand => 1, fill => 'both'); my ($lastx, $lasty) = (100, 100); my $card = $c->createImage($lastx, $lasty, -image => $m->Photo(-file => '/usr/lib/perl5/site_perl/5.6.1/i386-linux/Tk/Xcamel.gif', -format => 'gif'), -anchor => 'center'); $c->bind( $card, "<1>", sub { print STDERR "bark\n"; } ); $c->bind( $card, "", [ \&mymovehandler, $card, Ev("x"),Ev("y"), ]); # note how the event handler is setup: as a a reference # to an array. Array elements are the handler # and its parameters. See Tk::Bind about the Ev("x") and some such. $c->bind( $card, "", sub { print STDERR "dropped\n"; } ); sub mymovehandler { my ($canvas, $card, $x, $y ) = @_;; $c->move($card, $x -$lastx, $y - $lasty); ($lastx, $lasty) = ($x, $y); } Tk::MainLoop();