You can bind a handler to an event at any of three levels:
Instance binding: You can bind an event to one
specific widget. For example, you might bind the
PageUp key in a canvas widget to a
handler that makes the canvas scroll up one page. To
bind an event of a widget, call the .bind()
method on that widget (see Section 19, “Universal widget methods”).
For example, suppose you have a canvas widget
named self.canv
and you want
to draw an orange blob on the canvas whenever the
user clicks the mouse button 2 (the middle button).
To implement this behavior:
self.canv.bind ( "<Button-2>", self.__drawOrangeBlob )
The first argument is a sequence
descriptor that tells Tkinter that
whenever the middle mouse button goes down, it is to
call the event handler named
self.__drawOrangeBlob
. (See
Section 24.6, “Writing your handler”, below, for an
overview of how to write handlers such as
.__drawOrangeBlob()
). Note
that you omit the parentheses after the handler name,
so that Python will pass in a reference the handler
instead of trying to call it right away.
Class binding: You can bind an event to all
widgets of a class. For example, you might set up
all Button
widgets to respond
to middle mouse button clicks by changing back and
forth between English and Japanese labels. To bind
an event to all widgets of a class, call the .bind_class()
method on any widget (see Section 19, “Universal widget methods”, above).
For example, suppose you have several canvases,
and you want to set up mouse button 2 to draw an
orange blob in any of them. Rather than having to
call .bind()
for every one of
them, you can set them all up with one call something
like this:
self.bind_class ( "Canvas", "<Button-2>", self.__drawOrangeBlob )
Application binding: You can set up a binding so
that a certain event calls a handler no matter what
widget has the focus or is under the mouse. For
example, you might bind the
PrintScrn key to all the widgets of
an application, so that it prints the screen no
matter what widget gets that key. To bind an event
at the application level, call the .bind_all()
method on any widget (see Section 19, “Universal widget methods”).
Here's how you might bind the
PrintScrn key, whose “key
name” is "Print"
:
self.bind_all ( "<Key-Print>", self.__printScreen )