Version 5 of bindtags

Updated 2002-06-21 12:59:22

bindtags {window} ?tagList?

man page

Used to define the binding hierarchy for Widgets. See A tiny input manager for a usage example.

RS gave a great description of bindtags: he called them "bundles of bindings" or something to that effect. Widgets have a list of such "bundles" associated with them. Every time an event happens over that widget, each "bundle" is checked in turn, and if there is a binding matching the event, it is fired. If the binding does a break no more "bundles" are considered. Otherwise, each additional bundle goes through the same processing in turn.


By default, each widget has a set of bindtags that includes the specific widget, the widget class, the toplevel window for that widget, and the special word "all". So, for example, to attach a binding to all widgets you can associate the binding with the tag "all" rather than a specific widget.

Uppercase entry: Here is a little example that diverts lowercase letter keys to their uppercase variants (other characters come through unharmed) - for the "; break" bit I had to quote the binding body, instead of listifying it as one normally should:

 foreach i {a b c d e f g h i j k l m n o p q r s t u v w x y z} {
     bind Upcase $i "event generate %W [string toupper $i]; break"
 } ;# RS
 # Usage example, associate the bindtags to a widget:
 pack [entry .e]
 bindtags    .e [concat Upcase [bindtags .e]]

By default, each widget has a set of bindtags that includes the specific

Prettify this chat conversation:

    vr: WRT bindtags, can you explain how to preserve the original code bound to that event using bindtags?
    vr: also, why should I be binding to the buttonrelease event?
    suchenwi: Simply: if you have custom bindings, bind them to a bindtag, not a widget name; place that bindtag (with the [bindtags] command) in the binding sequence of the widget(s) in question.

suchenwi: eval bindtags $myWidget myBindings bindtags $mywidget suchenwi: puts everything that you bind to myBindings before all other bindings of myWidget (but they are still executed, if yours doesn't break)

Tk syntax help | Arts and crafts of Tcl-Tk programming | Category Command