in reply to Tk: listen for event generated anywhere in program

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!"; }

--
zejames

100th post ! Champaign !

Replies are listed 'Best First'.
Re^2: Tk: listen for event generated anywhere in program
by blueberryCoffee (Scribe) on Dec 14, 2004 at 10:12 UTC
    Thank you, thankyou, and thanks to you. I had spent all my time going over the event documentation, thinking it was the way the event was called rather than the actual binding. The answer was so easy, I can't believe I missed that. Thanks again.