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()