Mit Maus-Events können mausgesteuerte Aktionen ausgelöst werden. Die Mausklicks bzw. Mausbewegungen werden vom System erfasst und führen zum Aufruf von Callbackfunktionen. Im TigerJython liefern die Callbackfunktionen die Koordinaten des Mausklicks bzw. die aktuelle Koordinate des Mauszeigers. Sie werden als benannte Parameter von makeTurtle() registriert. Beispiel 1: Per Mausklick Farbmuster zeichnen.
|
Erklärungen zum Programmcode:
makeTurtle(mousePressed = onMousePressed): registriert die Callbackfunktion onMousePressed |
Beispiel 2: An der Position des Mausklicks wird ein Stern gezeichnet.
|
Erklärungen zum Programmcode:
makeTurtle(mousePressed = onMousePressed): registriert die Callbackfunktion onMousePressed, die beim Mausklick aufgerufen wird. Die Callbackfunktion liefert die aktuellen Koordinaten der Maus und zeichnet eine Sternfigur. Das Zeichnen erfolgt mit versteckten Turtle. Lässt man die Zeile hideTurtle() weg, dauert es jeweils eine Weile, bis die nächste Sternfigur erscheint. |
Beispiel 3: In diesem Beispiel möchte man die Turtle beim Zeichnen sehen (animierte Grafik). Dazu verwendet man anstelle des Parameters mousePressed den Parameter mouseHit oder mouseHitX. Diese sind so implementiert, dass sie in eigenen Threads laufen und dadurch die animierte Grafik ermöglichen. Auch unter Verwendung von mouseHit läuft dieses Beispiel nicht optimal. Wenn man bereits wieder klickt, während die Turtle noch am Zeichnen eines Sternes ist, so zeichnet sie diesen nicht fertig, sondern beginnt mit Zeichnen eines neuen Sternes. In dieser Situation eignet sich der Parameter mouseHitX am besten. Der nächste Mausklick wird erst dann registriert, wenn die Callbackfunktion vollständig ausgeführt wurde. Mit aktivieren bzw. deaktivieren der Zeile makeTurtle() kann man die beiden Parameter mouseHit bzw. mouseHitX testen.
|
Erklärungen zum Programmcode:
makeTurtle(mouseHitX = onMouseHit): registriert die Callbackfunktion onMouseHit() unter der Verwendung des Parameters mouseHitX . Der nächste Mausklick wird erst dann registriert, wenn die Callbackfunktion fertig gelaufen ist.
|
|
Für das Erfassen von Mausevents in makeTurtle() stehen folgende Parameter zur Verfügung.
Die Bezeichnung der Callbackfunktionen kann frei gewählt werden. |
Beispiel 4: Mit dem linken Mausklick werden die Felder eines Schachbretts rot gefärbt, mit rechtem Mausklick blau. Das Schachbrett muss zuerst gezeichnet werden. Die Callbackfunktion onMousePressed(x, y) gibt Koordinaten des Mausklicks zurück und prüft ob die linke oder rechte Maustaste gedrückt wurde.
|
Erklärungen zum Programmcode:
makeTurtle(mousePressed = onMousePressed): registriert die Callbackfunktion onMousePressed. | |
isLeftMouseButton: gibt True zurück, wenn die linke Maustaste gedrückt wurde | |
isRightMouseButton: gibt True zurück, wenn die rechte Maustaste gedrückt wurde |
Beispiel 5: Freihandzeichnen mit gedrückter Maustaste.
|
Erklärungen zum Programmcode:
onMouseDragged(x, y) :Callbackfunktion, die bei Mausbewegungen mit gedrückter Taste aufgerufen wird. Sie liefert die aktuellen Mauscursor-Koordinaten | |
makeTurtle(mousePressed = onMousePressed, mouseDragged = onMouseDragged): man kann mehrere Callbacks mit benannten Parametern registrieren. |
Beispiel 6: Linke und rechte Maustaste. In der Callbackfunktion onMousePressed(x, y) wird überprüft, ob die linke oder rechte Maustaste gedrückt wurde. Der linker Mausklick setzt die Turtle zu Beginn an die Mausklick-Position. Mit rechtem Mausklick wird die Funktion fill(x, y) aufgerufen, die geschlossene Fläche in der sich der Mauszeiger befinden ausfüllt. Zur Erfassung der Mausbewegung wird der Parameter mouseDragged mit der Callbackfunktion onMouseDragged verwendet.
|
Erklärungen zum Programmcode:
isLeftMouseButton() : Gibt True zurück, wenn die linke Maustaste gedrückt wurde | |
isRightMouseButton(): Gibt True zurück, wenn die rechte Maustaste gedrückt wurde |
Beispiel 7: Mit Mausklicks mehrere Turtles erzeugen.
|
Erklärungen zum Programmcode:
tf = TurtleFrame(mouseHit = onMouseHit) Die Callbackfunktion wird hier im TurtleFrame registriert. | |
t = Turtle(tf) der Turtle wird das TurtleFrame übergeben, damit alle Turtles im gleichen Fenster erscheinen |
Beispiel 8: Maus- und Tastatur-Events kombiniieren
|
Erklärungen zum Programmcode:
makeTurtle(mousePressed=onPressed,keyPressed=onKeyPressed) registriert gleichzeitig Maus- und Key-Events | |
global mx, my: die Variablen mx und my werden auch in der Funktion onKeyPressed() verwendet | |
mx = 0, my = y: Variablen werden initialisiert für den Fall, dass zuerst die Enter-Taste und nicht ein Maustaste gedrückt wird. |
Aufgaben Serie 12 |
1) |
Zeichne per Mausklick Sternfiguren. Teste drei Varianten: |
||
2) |
Zeichne zuerst eine nicht ausgefüllte Sternfigur. Das Programm soll dann das Füllen der geschlossenen Flächen mit der Mausklick ermöglichen. Fülle dann einige Flächen und erstelle ein schönes Muster.
|
||
3) |
Bei jedem Mausklick wird an dessen der Position eine neue Turtle erzeugt. Diese bewegt sich waagrecht. Wenn sie den Rand des Fensters erreicht, dreht sie sich um 180° und bewegt sich endlos hin und her.
|
||
4) |
Mit dem linken Mausklick soll ein roter Punkt gezeichnet werden (dot(20)). Mit dem rechten Mausklick kann die Punkte wieder löschen. Die einfachste Lösung ist, die Punkte mit der weissen Stiftfarbe zu übermalen.
|
||
5) |
Mit dem linken Mausklick werden leere Kreise gezichnet (openDot(40)). Falls man nach einem Mausklick die Taste Enter drückt wird, wird der zuletztgezeichnete Kreis gefüllt.
|