334
Ereignisgesteuerte Programme
Kapitel
13
Ereignisse
Ein Programm, das auf Mausklicks (eventuell auch auf Mausbewegungen)
und auf Tastatureingaben mit Aktionen reagiert, nennt man ein
ereignisge-
steuertes
Programm
(engl.:
event driven program)
. Ein Mausklick, ein Tas-
tendruck auf der Tastatur ist ein Ereignis – auf Englisch: ein
event
.
Ereig-
nisse zu registrieren, ist zunächst Aufgabe des Betriebssystems deines
Computers. GUI-Toolkits sind so programmiert, dass sie vom Betriebssystem
Ereignis-Objekte zugestellt bekommen, mit Informationen über die stattge-
fundenen Ereignisse. Das gilt auch für das Grafik-Toolkit Tkinter, auf dem
das Modul
turtle
aufbaut.
Aufgrund dieser vom Betriebssystem zugestellten Informationen kann da-
her das Turtle-Grafik-Fenster auf Ereignisse reagieren, die der Benutzer
ausgelöst hat. Nur müssen wir dem Grafik-Fenster sagen,
mit welchen Ak-
tionen
es auf Ereignisse, z. B. Mausklicks, reagieren soll.
Das klingt ja hübsch abstrakt, ruft also dringend nach einem anschaulichen
Beispiel.
»screen.onclick(goto)«
Nachdem du eben gelernt hast, mit Objekten zu programmieren, wollen wir
diesen Programmierstil in der Folge weiter verwenden. Wir werden wie
bisher zunächst das
Screen
-Objekt erzeugen und mit einem oder mehre-
ren
Turtle
-Objekten arbeiten.
Wir werden daher von nun an aus dem Modul
turtle
meistens nur die
beiden Klassen
Screen
und
Turtle
importieren.
>
Mach mit!
>>> from turtle import Screen, Turtle
>>> screen = Screen()
>>> turtle = Turtle()
>>>
Du hast nun das wohlbekannte Turtle-Grafik-Fenster mit einer Turtle vor
dir. Ereignisse, die dieses Fenster registrieren kann, sind zum Beispiel Maus-
klicks.
>
Klicke einige Male mit der linken Maustaste in das Grafik-Fenster.
335
»screen.onclick(goto)«
Was geschieht? Nichts! Das liegt daran, dass
wir
noch nicht festgelegt
haben, was im Falle eines Mausklicks geschehen soll. Das werden wir gleich
ändern!
>>> screen.onclick(turtle.goto)
>>>
Zunächst scheint diese Anweisung nichts bewirkt zu haben. Doch:
>
Klicke einige Male mit der linken Maustaste in das Grafik-Fenster.
Was beobachtest du? Die Turtle bewegt sich nach jedem Klick zu dem
Punkt im Grafik-Fenster, wo du hingeklickt hast. Warte nach jedem Klick,
bis die Turtle dort ist, bevor du auf eine andere Stelle klickst!
Das ist wohl einigermaßen überraschend und erfordert eine genaue Erklä-
rung. Bevor ich dir die gebe, machen wir aber noch eine kleine interaktive
Übung:
>>> def fun(x,y):
print("Click:", x, y)
turtle.goto(x, y)
print("Bin schon da:", turtle.pos())
>>> screen.onclick(fun)
Das sieht oberflächlich betrachtet so aus, als wollten wir bloß Spaß mit
Mausklicks haben. Jedoch:
>
Klicke einige Male mit der linken Maustaste in das Grafik-Fenster.
Das bewirkt, dass nach jedem Mausklick die Koordinaten des Punktes, auf
den du geklickt hast, im IPI-S
HELL
-Fenster ausgegeben werden, die Turtle
dann dorthin läuft, was auch sogleich gemeldet wird. Wie kommt das zu-
stande?
Erklärung:
screen.onclick(fun)
ist ein Aufruf der Methode
onclick()
für das Turtle-Grafik-Fenster
screen
. Als Argument haben wir das Funkti-
onsobjekt
fun
eingesetzt.
Die Methode
onclick()
hat zwei Parameter.
0
Für den ersten Parameter muss als Argument eine Funktion oder eine
Methode eines bestimmten Objekts eingesetzt werden – und zwar ein
Funktions- oder Methoden
objekt
, nicht ein Aufruf! (Erinnere dich: In
Python sind Funktionen auch Objekte.) Diese Funktion oder Methode
muss selbst auch zwei Parameter haben. Wir hatten im ersten
onc-
lick()
-Aufruf die
turtle
-Methode
turtle.goto
eingesetzt, im
zweiten dann
fun
.
fun
hatten wir
so definiert
, dass es zwei Parameter

Get Python für Kids 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.