In diesem Blog lernst Du, die Sichtbarkeit, das Tempo und die Form der Schildkröte einzustellen.
Inhaltsverzeichnis
Dieser Blog wird vom IAIP gratis zur Verfügung gestellt. Der Blog ist ein Bestandteil des Kurses K103 «Programmieren mit Turtle Graphics» und gehört zur Lektion 3, Themenblock 3 (L3T3).
Der Kurs führt dich durch die einzelnen Blogs, enthält Zusatzmaterialien, Videos, viele Aufgaben mit Lösungen und Quizze zur Lernkontrolle. Der Kurs hat eine Kursgebühr von CHF 50.- Mit dem Einschreiben zum Kurs hilfst du mit, dass solche Blogs auch zukünftig noch gratis zur Verfügung gestellt werden können.
- Im Blog hat es ergänzende Hinweise für Kursteilnehmer, jeweils in roter Farbe:
- Aufgaben zum Einüben und zur Veranschaulichung des Gesagten.
- Zusatzmaterialien zur Lektion oder zum Themenblock (in der Regel für jüngere Kursteilnehmer)
Einordnung
Wir haben in den zwei vorangehenden Themenblöcken bzw. Blogbeiträgen (K103: Zeichnen (Stift unten oder oben, Strichdicke) und K103: Zeichnen mit Farben) gesehen, wie man verschiedene Eigenschaften des Farbstifts verändern kann. Beispielsweise, ob dieser überhaupt zeichnet, oder auch Eigenschaften wie Strichdicke und Farbe. In diesem Themenblock lernst Du nun noch einige Eigenschaft der Schildkröte einzustellen. Namentlich ihre Sichtbarkeit, ihr Tempo und ihre Form.
Sichtbarkeit einstellen mit hideturtle() und showturtle()
Beginnen wir mit der Sichtbarkeit: Die Anweisung showturtle() (von engl. «show»: «zeige» & von engl. «turtle»: «Schildkröte») führt dazu, dass unsere Schildkröte sichtbar ist. Demgegenüber bewirkt die Anweisung hideturtle() (von engl. «hide»: «verstecke» & von engl. «turtle»: «Schildkröte»), dass unsere Schildkröte unsichtbar ist. Die Anweisungen haben folgende Syntax
turtle.hideturtle()
turtle.showturtle()
Anstelle von hideturtle() kann man auch die abgekürzte Form ht() verwenden. Und anstelle von showturtle() gibt es alternativ auch die abgekürzte Form st().
Hinweis für Fortgeschrittene:
Der Funktionsaufruf turtle.isvisible() liefert als Rückgabewert die aktuelle Sichtbarkeit der Schildkröte. Zurückgegeben wird entweder True (Schildkröte ist sichtbar) oder false (unsichtbar)
Das Tempo bestimmen mit speed()
Mit der Anweisung speed(param) (von engl. «speed»: «Tempo) können wir das Tempo unserer Schildkröte festlegen. Die Anweisungen hat folgende Syntax:
turtle.speed(speed=None)
In der Klammer können wir das Tempo übergeben. Beispielsweise so: speed(5). Erlaubt sind allerdings nur einige wenige Werte. Die Skala geht von 1 (langsam) bis 10 (schnell). Eine Sonderstellung hat speed(0). Hier geht die Schildkröte am schnellsten.
- “fastest”: 0
- “fast”: 10
- “normal”: 6
- “slow”: 3
- “slowest”: 1
Für die oben erwähnten 5 Werte kann man übrigens auch die jeweilige Tempobezeichnung eingeben. Anstelle speed(6) ist also auch die Anweisung speed(«normal») zulässig.
Hinweis für Fortgeschrittene:
Wie aufgrund er Syntax wahrscheinlich schon vermutet können wir auch das eingestellte Tempo abfragen, indem wir die Funktion ohne Parameterwert aufrufen: speed()
Schildkröten-Form umstellen
Zu guter Letzt wollen wir noch einen Blick auf die Form unserer Schildkröte werfen. Bis anhin hatte die Schildkröte jeweils die Form eines Dreiecks, was ja nicht gerade der allgemeinen Vorstellung von einer Schildkröte entspricht.
Wir haben in den vorangehenden Lektionen bereits des öfteren den Begriff Cursor anstelle Schildkröte oder Turtle verwendet. Das hat auch einen guten Grund.
Ein Cursor markiert in einem Computerprogramm die aktuelle Bearbeitungsposition auf dem Bildschirm. Im Falle von Turtle Graphics ist es gewissermassen die Position, an welcher sich unser Stift befindet. Damit man weiss, wo der Cursor gerade ist, muss man ihn sichtbar machen. Bei Textbearbeitungsprogrammen oder allgemeinen Eingabemasken ist es meist ein blinkender Balken. In Turtle Graphics ist es ein Dreieck. Ein Dreieck hat in unserem Kontext gewisse Vorteile. Man kann z.B. relativ gut einschätzen, in welche Richtung unsere «Schildkröte» gerade schaut, selbst wenn das Dreieck relativ klein ist.
Nichtsdestotrotz: Wir können die Form des Cursors natürlich auch anpassen. Die entsprechende Anweisung lautet shape() und hat die folgende Syntax:
turtle.shape(name=None)
Für den Parameter gibt es einige Standardwerte. Diese sind: “arrow”, “turtle”, “circle”, “square”, “triangle”, “classic”. Mit der Anweisung shape(«turtle») ändern wir also die Form des Cursors zu einer Schildkröte.
Schildkrötenform verändern (fortgeschrittene Kursteilnehmer)
Für fortgeschrittene Kursteilnehmer:
An dieser Stelle sei angemerkt, dass man noch weitere Sachen mit der Turtle machen kann. Insbesondere können wir sie vergrössern, verkleinern, verzerren und auch drehen. Die Grundeinstellung wird über den resizemode() vorgenommen:
turtle.resizemode(rmode=None)
Der Parameter rmode kennt drei Werte: «auto», «user», «noresize»
- «auto»: Turtle-Grösse passt sich automatisch der pensize an.
- «user»: Turtle-Grösse wird vom Benutzer mit shapesize() festgelegt.
- «noresize»: keine Grössenänderung der Turtle
Werden keine Argument angegeben, so wird der aktuelle aktuelle Wert des resizemode zurückgegeben.
Wir können also die Grösse der Turtle auch selber bestimmen (siehe resizemode(«user»). Die entsprechende Anweisung hierzu ist shapesize(). Sie hat die folgende Syntax:
turtle.shapesize(stretch_wid=None, stretch_len=None, outline=None)
Wir können drei positive Zahlenwerte angeben:
- stretch_wid bezieht sich auf die Streckung in die die Breite.
- stretch_len bezieht sich auf die Streckung in die Länge,
- outline schliesslich definiert die Randstärke.
Hierzu ein kleines Beispiel:
from turtle import * resizemode("user") shape("circle") stamp() forward(100) shapesize(3,6) stamp() exitonclick()
Das Programm führt zur nachfolgenden Ausgabe. Anhand der Kreisform sieht man gut, wie die ersten zwei Parameter stretch_wid und stretch_len die Form des Cursors vergrössern.

Wird übrigens shapesize() mit Argumenten aufgerufen, so setzt dies automatisch den resizemode auf den Wert «user». Man könnte sich im obigen Beispielprogramm also auch die Anweisung resizemode(«user») sparen.
Über die Anweisung shearfactor(winkel) kann man ferner noch den Scherungsfaktor für die Turtle-Shape definieren. Sie hat die folgende Syntax:
turtle.shearfactor(shear=None)
Die Anweisung unterwirft unsere Turtle-Gestalt einer Scherung um den angegebenen Winkel, wobei der Wert shear dem Tangens des Scherungswinkels entspricht. Die Anweisung ändert die Orientierung der Turtle nicht! Lässt man den Wert weg, so gibt die Funktion in gewohnter Weise den aktuellen Scherungsfaktor zurück.
from turtle import * resizemode("user") shapesize(1,3) shape("circle") stamp() forward(100) shearfactor(0.5) stamp() forward(100) shearfactor(1) stamp() forward(100) shearfactor(2) stamp() exitonclick()

Während shearfactor(winkel) die Form der Schildkröte verzerrt, können wir dies auch einfach nur drehen. Die entsprechenden Anweisungen lauten tilt(winkel) bzw. tiltangle(winkel) und haben die folgende Syntax:
turtle.tiltangle(angle=None)
turtle.tilt(angle=None)
Die Anweisungen verdrehen die Form um den Winkel angle. tiltangle(winkel) bezieht sich auf den absoluten Winkel (0 grad ist gemäss Ausrichtung unserer Schildkröte beim Start), wohingegen tilt(winkel) sich jeweils auf den aktuellen Wert des Verdrehungswinkels bezieht. Achtung: Die Anweisungen drehen nur unsere Form, ändern aber wiederum nicht die Orientierung der Turtle. Am einfachsten sieht man die Funktionsweise wiederum an einem Beispiel:
from turtle import * resizemode("user") shapesize(1,3) shape("circle") stamp() forward(100) tilt(45) stamp() forward(100) tilt(45) stamp() forward(100) tiltangle(45) stamp() exitonclick()

Zu guter Letzt gibt es noch die Möglichkeit die Transformation der Schildkrötenform über eine Matrix vozunehmen:
shapetransform(t11=None, t12=None, t21=None, t22=None)
t11, t12, t21, t22 legen die Transformationsmatrix fest. Fehlen alle vier Werte, so wird die Transformationsmatrix als Vierertupel zurückgegeben. Auch hier verändert man nicht die Orientierung der Turtle.
Exkurs: Eigenschaften des Stifts einstellen
Für Fortgeschrittene Kursteilnehmer:
Mit der Anweisung pen(param) (von engl. «pen»: «Stift») können wir auch mehrere Eigenschaften des Stifts gleichzeitig einstellen. Die Anweisungen hat folgende Syntax:
pen(pen=None, **pendict)
Der Parameter pen ist ein Dictionary mit folgenden Schlüssel-Wert-Paaren:
- «shown»: True/False
- «pendown»: True/False
- «pencolor»: Farbnamen (Farbstring) oder drei Werte/ Tuple mit drei Werten
- «fillcolor»: Farbnamen (Farbstring) oder drei Werte/ Tuple mit drei Werten
- «pensize»: positive Zahl
- «speed»: ganze Zahl im Bereich 0 bis 10
- «resizemode»: «auto» oder «user» oder «noresize»
- «outline»: positive Zahl
- «stretchfactor»: (positive Zahl, positive Zahl)
- «tilt»: Zahl
- «shearfactor» : positive Zahl
Die Anweisung setzt die Eigenschaften des Zeichenstiftes entsprechend des als Argument übergebenen Dictionarys pen und/oder der an **pendict übergebenen Schlüsselwort-Argumente.
Wenn keine Argumente angegeben werden, wird das pen-Dictionary zurückgegeben.
Übungsaufgaben
Nachfolgend findest Du ein paar Übungsaufgaben.
Lösungen zu den Aufgaben findest du im Kurs K103 «Programmieren mit Turtle Graphics «:
Lektion 3, Themenblock 3 (L3T2).
Aufgabe 1: 4 Abdrücke
Zeichne das nebenstehende Bild, indem du dir Form der Schildkröte veränderst und jeweils einen Stempelabdruck machst. Gehe am Ende zurück zum Ursprung und verstecke den Cursor.
