Kapitel 18
Event-Verarbeitung
528
18.2.3 Modifizierer
Mit einem Modifizierer können komplexere Events wie z.B. das gleichzeitige Drücken von
(Shift) und einer anderen Taste oder das mehrfache Klicken einer Taste dargestellt werden.
Tabelle 18.4 gibt einen Überblick.
18.3 Beispiel: Tastaturereignisse verarbeiten
Das folgende Skript simuliert das erste gelungene Rendezvous-Manöver der beiden ame-
rikanischen Raumschiffe Gemini 6 (Schirra und Stafford) und Gemini 7 (Bormann und
Loyell) am 15.12.1965. Das linke Raumschiff kann mit den Pfeiltasten gesteuert werden.
Abb. 18.2: Simulation des Rendezvous-Manövers von Gemini 6 und Gemini 7 (1965)
Skript:
Modifizierer Erklärung
Alt
Die (Alt)-Taste wird gedrückt.
Any
Der Eventtyp wird generalisiert. Das Muster <Any-KeyPress> bedeutet
z.B., dass irgendeine Taste betätigt worden ist.
Control
Der Benutzer drückt die Taste (Strg).
Double
Zwei Ereignisse passieren zeitlich kurz hintereinander. Zum Beispiel
stellt
<Double-Button-3> einen Doppelklick mit der rechten Maus-
taste dar.
Shift
Der Benutzer drückt die Taste (Shift).
Triple
Drei Ereignisse kurz hintereinander
Tabelle 18.4: Wichtige Modifizierer für Event-Patterns
# gemini.pyw
from tkinter import *
529
18.3
Beispiel: Tastaturereignisse verarbeiten
Erläuterung:
#1: In das Anwendungsfenster wird ein Canvas gepackt, auf den das Hintergrundbild (#2)
und Bilder der beiden Raumschiffe (
#3, #4) gesetzt werden. Die ID-Nummer des bewegli-
chen Raumschiffes
self.gemini7 (#3) ist wichtig für die Verschiebeoperationen in den
Eventhandlern. Die ID-Nummer des rechten fixierten Raumschiffes (
#4) wird nicht benötigt.
#5: Die Events, die das Laufzeitsystem bei Betätigung der Pfeil-Tasten erzeugt, werden an
einzelne Eventhandler (Methoden der Klasse
Spielflaeche) gebunden. Für jeden der vier
Events gibt es eine eigene Methode. Beachten Sie, dass Tastatur-Events an das Anwendungs-
fenster gebunden werden (Objekt der Klasse
Tk), weil der Event erzeugt werden soll, wenn
das Anwendungsfenster aktiv ist.
class Spielflaeche:
def __init__(self):
self.fenster = Tk()
self.canvas = Canvas(self.fenster,
width='10c', height='5c') #1
s e l f .ca n vas. p ack ( )
h = PhotoImage(file='/python/gemini/erde.gif')
self.canvas.create_image(0,0,anchor=NW, image=h) #2
g7 = PhotoImage( file='/python/gemini/gemini7d.gif')
self.gemini7 = self.canvas.create_image(
50 , 50, i mag e = g 7) #3
g6 = PhotoImage(file='/python/gemini/gemini6.gif')
self.canvas.create_image(300,30,image=g6) #4
self.fenster.bind('<KeyPress-Down>',self.runter) #5
self.fenster.bind('<KeyPress-Up>', self.rauf)
self.fenster.bind('<KeyPress-Left>', self.links)
self.fenster.bind('<KeyPress-Right>', self.rechts)
self.fenster.mainloop()
def r auf ( self , eve n t ) : #6
self.canvas.move(self.gemini7,0,-3) #7
def runter(self,event):
self.canvas.move(self.gemini7,0,+3)
def links(self,event):
self.canvas.move(self.gemini7,-3,0)
def rechts(self,event):
self.canvas.move(self.gemini7,3,0)
s = Spielflaeche()

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.