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 ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access