====== Ereignisbehandlung mit der Python Turtle Bibliothek ====== Für die weiteren Beschreibungen wird angenomen, dass die folgende Initialisierung der Python Turtle Bibliothek gemacht wurde: import turtle Zeichenflaeche = turtle.Screen() Zeichenflaeche.setup(width=650, height=450, startx=900, starty=0) ===== Ereignisse (Events) ===== Die Ereignisbehandlung (Event Handling) erlaubt, dass Programmteile (Funktionen) ausgeführt werden, wenn bestimmte Ereignisse auftreten. Die Ereignisbehandlung ist eine Alternative zum zyklischen Abfragen von Zuständen (Polling). Das Event Handling benötigt 3 Komponenten: * Event Listener * Event Registration * Event Handler ==== Event Listener ==== Der Event Listener "hört", ob ein Event auftritt. Ist dieses Event bei ihm registriert worden, dann löst er den für dieses Event registrierten Event Handler aus. Zeichenflaeche.listen() ==== Event Registration ==== Jedes Event, auf das reagiert werden soll, muss beim Event Listener angemeldet werden. Dabei werden der Name des Event Handlers und das Event selbst angegeben. Der Name des Event Handlers ist der pure Funktionsname, also ohne Klammern, der Funktion die für dieses Event aufgerufen werden soll. Events sind die Basiszeichen der Tastatur: ''a-z'', ''A-Z'', ''0-9'' und benannte Sondertasten wie zum Beispiel 'plus' für '+' oder 'Up' für die ⬆️ Taste oder Maus-Klicks. Eine Uebersicht findet man hier [[https://anzeljg.github.io/rin2/book2/2405/docs/tkinter/key-names.html|Key-Names]] oder hier [[https://www.tcl.tk/man/tcl8.4/TkCmd/keysyms.html|KeySyms]]. Für jedes Event muss eine eigene Registration stattfinden und kann genau eine Funktion aufgerufen werden. ''onkey'' Handler haben keine Funktionsparamter. Zeichenflaeche.onkey(Schreibe_a, 'a') Zeichenflaeche.onkey(Schreibe_b, 'b') Maus-Ereignis-Handler, wie ''onclick'', können Paramter, wie z.B. die aktuellen Mauskoordinaten, enthalten. ==== Event Handler ==== Der Event Handler ist die Funktion, die beim Auftreten des Events aufgerufen wird. Jeder Eventhandler kann nur genau Event behandlen, da bei der Registration genau ein Event einem Event Handler zugeordnet wird. def Schreibe_a(): print('Die Taste "a" wurde gedrückt.') def Schreibe_b(): print('Die Taste "b" wurde gedrückt.') Hinweis: Wie immer in Python müssen die Funktionen vor ihrer Verwendung definiert werden. ==== Minimales Event Handling Beispiel ==== # MiniMiniPaint import turtle Zeichenflaeche = turtle.Screen() Zeichenflaeche.setup(width=650, height=450, startx=900, starty=0) Zeichenflaeche.title('Minimales Event Handling Beispiel') Stift = turtle.Turtle() # Event Handler Funktionen def Zeichne_hoch(): print('HOCH') Stift.setheading(90) Stift.forward(50) def Zeichne_rechts(): print('RECHTS') Stift.setheading(0) Stift.forward(50) def Setze_rot(): print('ROT') Stift.color('red') def Setze_gruen(): print('GRUEN') Stift.color('green') def Schreibe_Maus_Koordinaten(x,y): print(f'Maus-Koordinaten: {x}, {y}') # Initialisierung der Listener Funktionalität Zeichenflaeche.listen() # Registrierung der Event Handler Zeichenflaeche.onkey(Zeichne_hoch, 'Up') Zeichenflaeche.onkey(Zeichne_rechts, 'Right') Zeichenflaeche.onkey(Setze_rot, 'r') Zeichenflaeche.onkey(Setze_gruen, 'g') Zeichenflaeche.onclick(Schreibe_Maus_Koordinaten) # Programm laufen lassen Zeichenflaeche.mainloop()