Kapitel 18
Event-Verarbeitung
524
18.1 Einführendes Beispiel
Als einführendes Beispiel betrachten wir ein Editor-Programm, mit dem man durch Klicks
mit der rechten und linken Maustaste ein Bild aus insgesamt 100 quadratischen Flächen
erstellen kann. Abbildung 18.1 zeigt einen Screenshot.
Abb. 18.1: Editor zur Erstellung eines Rasters aus unterschiedlich
gefärbten quadratischen Flächen
Skript:
# raster.pyw
from tkinter import *
class Raster:
def __init__(self):
liste = [(x,y) for x in range(10) for y in range(10)]
self.fenster = Tk()
for (i,j) in liste:
l=Label(self.fenster, width=2, height=1,
b g=' w hit e ') #1
l.grid(column=i, row=j) #2
l.bind(sequence='<Button-1>',
f unc = sel f . lin k s kli c k ) #3
l.bind(sequence='<Button-3>',
func=self.rechtsklick)
l.bind(sequence='<Double-Button-1>',
func=self.doppelklick)
self.fenster.mainloop()
def linksklick(self, event):
event.widget.config(bg='black') #4
525
18.1
Einführendes Beispiel
Erläuterung:
Die Flächenelemente werden durch Label-Widgets mit anfangs weißer Hintergrundfarbe
(Option
bg) erzeugt (#1), die mithilfe des grid()-Layoutmanagers in ein Raster aus 10 mal
10 Zellen eingefügt werden (#2).
In dem Skript werden folgende Events verarbeitet:
Beim Klick mit der linken Maustaste wird das Feld, das sich unter dem Mauszeiger befin-
det, schwarz.
Beim Klick mit der rechten Maustaste wird das ausgewählte Feld grau.
Bei einem Doppelklick mit der linken Maustaste wird das ausgewählte Feld weiß.
Die Events werden durch Event-Sequenzen (Strings) gemäß Tabelle 18.1 spezifiziert.
Die Reaktionen des Systems auf diese Events werden in drei Eventhandlern festgelegt. Es
handelt sich um die Methoden
self.linksklick(), self.rechtsklick() und self.dop-
pelklick()
. Jede dieser Methoden erhält als Argument das Event-Objekt event, das vom
Laufzeitsystem bei einem Mausklick erzeugt worden ist. Einzige Aufgabe der Eventhandler
ist in diesem Fall, die Hintergrundfarbe des angeklickten Labels zu ändern. Dazu muss
zunächst herausgefunden werden, welches der 100 Label-Widgets angeklickt worden ist. Der
Name dieses Widgets ist im Attribut
event.widget enthalten. Somit kann der Eventhandler
gezielt an dieses Widget die Botschaft schicken, die Option
bg neu zu konfigurieren (z.B. #4).
In Anweisung
#3 und den beiden folgenden Anweisungen geschieht die Bindung der
Events an die Eventhandler. Für jedes der 100 Label-Widgets wird drei Mal die
bind()-
Methode aufgerufen. Zum Beispiel wird in Zeile
#3 für das aktuelle Label der Event »Klick
mit der linken Maustaste« an die Methode
self.linksklick() gebunden. Der Event wird
im ersten Argument durch die Event-Sequenz
<Button-1> spezifiziert.
def rechtsklick(self, event):
event.widget.config(bg='grey')
def doppelklick(self, event):
event.widget.config(bg='white')
r = Raster()
Event (informale Beschreibung) Event-Sequenz
Klick mit der linken Maustaste
<Button-1>
Klick mit der rechten Maustaste
<Button-3>
Doppelklick mit der linken Maustaste
<Double-Button-1>
Tabelle 18.1: Beispiele für Event-Sequenzen

Get Python 3 - Lernen und professionell anwenden now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.