lehrkraefte:sbt:informatik-glf2-23:pythonturtleevents

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
lehrkraefte:sbt:informatik-glf2-23:pythonturtleevents [2023/12/10 23:44] – [Komplettes Event Handling] Karlheinz Schubertlehrkraefte:sbt:informatik-glf2-23:pythonturtleevents [2023/12/11 00:00] (current) – [Event Registration] Karlheinz Schubert
Line 1: Line 1:
 +====== Ereignisbehandlung mit der Python Turtle Bibliothek ======
 +
 +Für die weiteren Beschreibungen wird angenomen, dass die folgende Initialisierung der Python Turtle Bibliothek gemacht wurde:
 +
 +<code python>
 +import turtle
 +
 +Zeichenflaeche = turtle.Screen()
 +Zeichenflaeche.setup(width=650, height=450, startx=900, starty=0)
 +</code>
 +
 +===== 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.
 +
 +<code python>
 +Zeichenflaeche.listen()
 +</code>
 +
 +==== 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.
 +
 +<code python>
 +Zeichenflaeche.onkey(Schreibe_a, 'a')
 +Zeichenflaeche.onkey(Schreibe_b, 'b')
 +</code>
 +
 +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.
 +
 +<code python>
 +def Schreibe_a():
 +  print('Die Taste "a" wurde gedrückt.')
 +
 +def Schreibe_b():
 +  print('Die Taste "b" wurde gedrückt.')
 +</code>
 +
 +<WRAP left round tip 100%>
 +Hinweis: Wie immer in Python müssen die Funktionen vor ihrer Verwendung definiert werden.
 +</WRAP>
 +
 +==== Minimales Event Handling Beispiel ====
 +<code python>
 +# 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()
 +</code>