# ThreadEx1.py from gturtle import * from thread import start_new_thread def go(t): start_new_thread(draw, (t, )) def draw(t): for i in range(8): step(t) def step(t): t.forward(20) t.left(90) t.forward(20) t.right(90) tf = TurtleFrame() john = Turtle(tf) laura = Turtle(tf) laura.setColor("red") laura.setPenColor("red") laura.setPos(0, 160) laura.left(90) go(john) go(laura) |
Programmcode markieren
|
Erklärungen zum Programmcode:
start_new_thread(draw, (t, ))Der Thread wird durch Aufruf der Methode start_new_thread() gestartet. Diese führt die Funktion draw() aus. Die zugehörige Parameterliste muss mehr als ein Element enthalten, deswegen das Komma und die Leerstelle |
Beispiel 2:Im folgenden Beispiel zeichnen drei Turtles gleichzeitig Quadrate.
|
Beispiel 3:Noch ein schönes Beispiel mit drei Turtlen.
|
Im folgenden Beispiel wird an der Stelle des Mausklicks eine neue Turtle erzeugt und diese zeichnet einen Stern. Da jede Turtle im eigenen Thread zeichnet, können gleichzeitig beliebig viele zeichnende Turtles erzeugt werden.
|
Erklärungen zum Programmcode:
tf = TurtleFrame(mousePressed = mousePressed) Die Mausevents werden im TurtleFrame registriert | |
t = Turtle(tf) Die Turtles erscheinen im gleichen TurtleFrame | |
while True: Eine endlose Schleife: Die Turtles zeichnen so lange ihre Sterne, bis das Programm abgebrochen wird | |
setScreenPos(e.getPoint()) Mit der Methode getPoint() werden die Koordinaten des Mausklicks abgerufen. Die Methode setScreenPos() rechnet die Bildschirm-Koordinaten in Turtlekoordinaten um | |
start_new_thread(star, (t, )) Für jede Turtle wird ein neuer Thread erzeugt, der die Funktion star() aufgeruft |
Beispiel 5: Verwendet man mouseHit, so wird jede per Mausklick erzeugte Turtle bereits in eigenem Thread erzeugt. Dadurch vereinfacht sich der Programmcode:
|
Aufgaben Serie 18 |
1) |
Zwei Turtles zeichnen gleichzeitig eine Figur, die aus Quadraten verschiedener Grösse besteht.
|
2) |
Vier Turtles zeichnen gleichzeitig Treppen und füllen die Fläche unter der Treppenlinie mit ihren Stiftfarben.
|
3) |
Mit jedem Mausklick wird eine neue Turtle erzeugt. Das Zeichnen der Blumen erfolgt für jede Turtle im eigenen Thread. Dadurch können gleichzeitig beliebig viele zeichnende Turtles erzeugt werden.
|