From the Tk bind documentation :
...$widget->bind(tag,sequence,callback);
...If a tag is the name of an internal window the binding applies to that window.
If the tag is the name of a toplevel window the binding applies to the toplevel window and all its internal windows.
If the tag is the name of a class of widgets, such as Tk::Button, the binding applies to all widgets in that class;
If tag has the value all, the binding applies to all windows in the application.
So just use the first argument of the bind call :
#!/usr/bin/perl use Tk; use strict; my $app = new MainWindow; my $entry = $app->Entry()->pack(); $entry->bind('all', '<<customEvent>>' => \&respondToEvent); $app->Button(-text => 'gen event by app', -command => [\&sendEvent, 0])->pack(); $app->Button(-text => 'gen event by label', -command => [\&sendEvent, 1])->pack(); MainLoop; sub sendEvent { if(@_[0]) { # have entry generate event - this works $entry->eventGenerate('<<customEvent>>'); } else { # have mainwindow generate event - this produces nill $app->eventGenerate('<<customEvent>>'); } } sub respondToEvent { print "Responding to Event!"; }
100th post ! Champaign !
In reply to Re: Tk: listen for event generated anywhere in program
by zejames
in thread Tk: listen for event generated anywhere in program
by blueberryCoffee
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |