Der Callback, den Buttons im command-Parameter nehmen, ist nur ein Spezialfall. Generell können Widgets fast beliebige Events verarbeiten. Mögliche Event-Typen sind u.a.:
Die Strings oben können als erstes Argument im Aufruf der bind-Methode von Widgets dienen. Das zweite Argument ist der Callback, der wiederum als Argument ein Event-Objekt bekommt, in dem unter anderem der Event-Typ, das Widget, auf dem das Event ausgelöst wurde, die Mausposition und ggf. die gedrückte Taste steht.
Ein etwas albernes Beispiel für Eventverarbeitung: Ein Widget, in dem ein Quit-Knopf umherhüpft, sobald der Mauszeiger es erreicht und der durch Eingabe von “komm” unter den Mauszeiger gezwungen werden kann. Es ist nicht so, dass bei GUI-Programmen Leerzeilen unüblich wären, der Platz auf der Folie hat einfach nicht gereicht.
import Tkinter, random
class ButtonJump(Tkinter.Frame):
def __init__(self, master, **kwargs):
apply(Tkinter.Frame.__init__, (self, master),
kwargs)
self.bt = Tkinter.Button(self, text="Quit",
command=self.quit)
self.bt.bind('<Enter>', self.doJump)
self.keyStrokes = []
self.bind('<Key>', self.doKey)
self.doJump(); self.focus()
def doKey(self, event):
self.keyStrokes.append(event.char)
if len(self.keyStrokes)>4:
del self.keyStrokes[0]
if self.keyStrokes==['k','o','m','m']:
self.bt.bind('<Enter>', lambda ev, s=self:
s.bt.bind('<Enter>', s.doJump))
self.bt.place_forget()
self.bt.place(x=event.x, y=event.y,
anchor=Tkinter.CENTER)
def doJump(self, event=None):
self.bt.place_forget()
self.bt.place(relx=random.random(), rely=
random.random(), anchor=Tkinter.CENTER)
root = Tkinter.Tk()
ButtonJump(root, width=300, height=300).pack(
expand=1, fill=Tkinter.BOTH)
root.mainloop()