Logo Cusanus Gymnasium Erkelenz
Icon Leitprogramm Informatik

Cusanus-Gymnasium Erkelenz Europaschule

Einführung in die Programmierung mit

Kapitel VII - Additum
Differenzierungskurs
"Informatik" - Klasse 9 / 10
Gr - 2025 / 2026
Version vom 30.08.2025

Kapitel VII - Ereignisbehandlung

Additum: Mausereignisse

Objekte der Klasse Turtle, die wir erzeugt haben, können wir mitlerweile auf Tastendrücke nach unseren Wünschen reagieren lassen. Neben der Tastatur gibt es noch ein zweites zentrales Eingabegerät - die Maus. In dem vorliegenden Additum zu Kapitel VII geht es um die Reaktion auf entsprechende Aktionen (klicken oder ziehen) in Zusammenhang mit der Maus.

Starte - sofern nicht bereits geschehen - den PyScripter. Lade nun in der vorhandenen Shell das Turtle-Modul und erzeuge ein Objekt der Klasse Turtle. Bisher haben wir die Objekte der Klasse Turtle mittels der Methoden forward etc. über den Bildschirm gesteuert. Die einzelnen Objekte bewegen sich entsprechend über die Zeichenfläche. Dieser liegt ein Koordinatensystem - wie wir es aus der Mathematik kennen - zugrunde. Entsprechende Punkte werden auch hier in der Form (x,y) bezeichnet. Die Achsen sind ebenfalls wie bekannt ausgerichtet. Für die Skalierung der Achsen solltest du mitlerweile ein Gefühl bekommen haben.

Die Methode goto befördert unser Turtle-Objekt nun zu einem beliebigen Ort auf der Zeichenfläche. Dazu müssen wir nur die entsprechenden Koordinaten als Argumente an die Methode übergeben. Probiere es aus. Achte darauf, dass du die Methode richtig aufrufst. Du wirst ferner feststellen, dass das Objekt nicht "springt", sondern sich zeichnend über den Bildschirm bewegt.

Eine entsprechende Reaktion auf einen Mausklick auf einer Stelle der Zeichenfläche wäre beispielsweise, dass sich das Turtle-Objekt genau dorthin bewegt. Auch dafür stellt das zugehörige Screen-Objekt eine Methode bereit. Diese trägt - in Analogie zur onkey-Methode - den Namen onclick.

Die Methode benötigt mindestens ein Argument, nämlich die Methode oder Funktion, die bei einem Klick aufgrufen werden soll. Als zweites Argument legt man die Maustaste (rechts, links, mittig) fest. Ist hier nichts angegeben, wird standardmäßig die linke Maustaste verwendet. Wie du die anderen Maustasten auswählst, erfährst du in dem aufgehenden Hilfefenster im PyScripter.

Bei der Methode oder Funktion, die man angibt, muss man beachten, dass diese automatisch zwei Argumente übergeben bekommt: Die x- bzw. y-Koordinate des stattgefundenen Mausklickes auf der Zeichenfläche. Dennoch müssen wir den Funktionsnamen bzw. Methodennamen weiterhin ohne die sonst bei einem Aufruf üblichen Klammern bzw. Argumenten angeben. Entsprechend sorgt die Anweisung theScreen.onclick(myTurtle.goto) dafür, dass sich das referenzierte Turtle-Objekt bei einem Mausklick an die Position begibt, die mittels eines Mausklickes markiert wurde. Das vollständige Programm sieht wie folgt aus:

# Christian Graf / 05.04.2011 / Nachlaufen auf Mausklick
from turtle import Turtle
myTurtle = Turtle("circle")
theScreen = myTurtle.getscreen()
theScreen.onclick(myTurtle.goto)
myTurtle.screen._root.mainloop()

Möchtest du nun eine eigene Funktion definieren, beispielsweise so, dass das Turtle-Objekt den Stift hochhebt, sich zum Ort des Geschehens begibt und dort den Stift wieder herunternimmt und diese mit dem Mausklick verbinden, so musst du Folgendes beachten: Die Funktion bekommt - wie gesagt - automatisch zwei Argumente übergeben. Entsprechend muss die Funktion auf die Übergabe von Argumenten vorbereitet sein. Wie das genau funktioniert erfährst du im Additum zu Kapitel V. Wenn du dieses noch nicht durchgearbeitet hast, so solltest du dieses vorher nachholen.

Nicht nur die Zeichenfläche kann mit einem Mausklick umgehen, sondern auch die Turtle-Objekte selber. Jedes Turtle-Objekt stellt dazu eine Methode ondrag bereit, die eine Methode oder Funktion aufruft, wenn das Turtle-Objekt über die Zeichenfläche mit der Maus gezogen wird. Auch die entsprechende Methode oder Funktion bekommt die gleichen zwei Argumente wie bei der onclick-Methode übergeben.

# Christian Graf / 05.04.2011 / Verschieben des Turtle-Objektes mit der Maus 
from turtle import Turtle
myTurtle = Turtle("circle")
theScreen = myTurtle.getscreen()
myTurtle.ondrag(myTurtle.goto)
myTurtle.screen._root.mainloop()

Beachte bitte, dass du das Turtle-Objekt langsam bewegst, ansonsten kommt es zu Problemen und das Turtle-Objekt springt "wild" über die Zeichenfläche.

Erkennst du den Unterschied, warum man die eine Reaktion für die Zeichenfläche und die andere für das Turtle-Objekt festlegen muss? Wenn nicht, diskutiere mit einem Mitschüler oder frage den Lehrer.

Icon Aufgabe

Schreibe eine Methode jumpto, die zwei Argumente übergeben bekommt und das vorhandene Turtle-Objekt ohne Zeichnung zu der übergebenen Position bewegt. Verbinde diese Funktion mit dem Mausklick auf die rechte Maustaste.

Lösung:
# Christian Graf / 05.04.2011 / Springen auf Mausklick
from turtle import Turtle
myTurtle = Turtle("circle")
# schnelleres Laufes des Turtle-Objektes
myTurtle.speed(0)
theScreen = myTurtle.getscreen()
def jumpto(x,y):
    myTurtle.penup()
    myTurtle.goto(x,y)
    myTurtle.pendown()
theScreen.onclick(jumpto,3)
myTurtle.screen._root.mainloop()
Wenn du noch nicht weißt, wie man Funktionen mit Parametern definiert, solltest du vorher das Additum zu Kapitel V durcharbeiten. In der vorliegenden Lösung wurde die Geschwindigkeit des Turtle-Objektes erhöht, da es sonst zu unerwünschten Nebeneffekten kommt, wenn man nochmal klickt, bevor das Objekt angekommen ist.
Die Reaktion auf die rechte Maustaste erreicht man durch die Angabe des zusätzlichen Argumentes 3 bei der onclick-Methode des Screen-Objektes. Die Maustasten werden entsprechend durchnummeriert. (links-1, mittig-2 und rechts-3)

Zum Abschluss noch Ideen für weitere Übungen: Mittels der Methode pencolor kann man die Farbe des Stiftes verändern. Erzeuge doch einfach ein zweites Turtle-Objekt mit einer anderen Stiftfarbe. Ordne auch diese Objekt der Klasse Turtle an, auf entsprechende Mausklicks zu reagieren. Beachte, dass auf einen Klick der rechten Maustaste erstmal nur ein Objekt reagieren kann. Soll das andere Objekt sich auch bewegen, so musst du für dieses eine andere Maustaste angeben. Oder definiere eine Taste, die die Stiftfarbe des bereits vorhandenen Turtle-Objektes wechselt. So kannst du ganz leicht dein eigenes Mal- und Zeichenprogramm erstellen. Vielleicht findest du weitere Möglichkeiten zur Erweiterung.

Unter http://docs.python.org/library/turtle.html findest du eine Dokumentation zur Klasse Turtle bzw. zur Klasse Screen. Dort sind alle Methoden (mit Beispielen) beschrieben. Dort findest du ggf. weitere Anregungen zum eigenen Erforschen neue Funktionen oder gar zum Schreiben eigener Programme oder Spiele.

abbildung
Möglichkeiten der Methode write() eines Turtle-Objektes