The bindtags Command
So, we know that a Button has a
predefined binding for a <ButtonRelease-1>
event. What do you suppose will happen if we make an instance binding
to <ButtonRelease-1>
as well? Which callback
gets invoked, the class or the instance? Or are both invoked? If both
callbacks are invoked, in what order do they occur?
Both callbacks are invoked: first the class, then the instance. To
understand why, we need to study the bindtags
command. Whenever a binding is created, it is always associated with
an identifying tag. Thus far, each of our Button binding examples has
used two tags, a class name and a widget instance, which represent
the Button’s class tag and the instance tag, respectively.
Except for Toplevels, every widget has two additional binding tags:
the widget’s Toplevel window and the global string
all
. Toplevels are their own instances, so they
have only three binding tags.
When an event occurs, it’s compared against all the event
descriptors for every tag that a widget owns, and if the event
matches one of the tag’s list of event descriptors, the
associated callback is executed. The search continues through the
bindtags
list until all the tags have been
examined and every possible callback executed.
A widget’s bindtags
list is ordered. It is
always searched from left to right (starting at array index 0). The
bindtags
command queries, adds, deletes, or
rearranges a widget’s binding tags list.
Let’s do a bindtags
query command on our
$twice
button from the previous ...
Get Mastering Perl/Tk now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.