Tcl::pTk::XEvent - Limited Support for perl/tk's XEvent in Tcl::pTk
# Create binding on a widget, using XEvent to get # the mouse x/y position $widget->bind( '<Motion>', sub { my $e = $widget->XEvent; # Get mouse x/y position in the widget my $mouseX = $e->x; my $mouseY = $e->y; print "mouse X/Y = $mouseX/$mouseY\n"; } );
Tcl::pTk::XEvent provides (very) limited support for perl/tk's XEvent mechanism in Tcl::pTk. Currently it only provides support for the x and y calls. Other calls will generate an error message.
For XEvent calls other than x and y, bindings should be converted to use the equivalent Ev() calling as shown below.
Perl/Tk (Tk) provides an additional method (The XEvent mechanism) to get event information during event processing. This was added to perl/tk by adding c-code functions (Tk_EventInfo in tkbind.c and others) to the original Tcl/Tk c-code.
Although the XEvent mechanism is not described in the documents included in the perl/tk package, it is used in many places in the perl/tk code, and in other external perl/tk widgets. The alternative to XEvent is the Ev mechanism, which is documented in the Tk::bind docs (Binding Callbacks and Substitution section).
Example of XEvent
# Create binding on a widget, using XEvent to get # the mouse x/y position $widget->bind( '<Motion>', sub { my $w = shift; # Get the event widget my $e = $w->XEvent; # Get mouse x/y position in the widget my $mouseX = $e->x; my $mouseY = $e->y; print "mouse X/Y = $mouseX/$mouseY\n"; } );
Equivalent Example using Ev() calls
This is how a XEvent call should be converted to using the Ev() calls, which are fully supported in Tcl/Tk.
# Create binding on a widget, using Ev calls to get # the mouse x/y position $widget->bind( '<Motion>', [ sub { my $w = shift; # Get the event widget my ($x, $y) = @_; # Get x/y passed in from the Ev() calls # Get mouse x/y position in the widget my $mouseX = $x; my $mouseY = $y; print "mouse X/Y = $mouseX/$mouseY\n"; }, Ev('x'), Ev('y) ] );
To install Tcl::pTk, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Tcl::pTk
CPAN shell
perl -MCPAN -e shell install Tcl::pTk
For more information on module installation, please visit the detailed CPAN module installation guide.