Programme schreiben, die auf Mausklicks oder auf die Mausbewegungen reagieren. Dieses Programmierkonzept wird insbesondere bei Programmen mit einer grafischen Benutzeroberfläche angewendet.
MUSTERBEISPIELE
Bei den Mausevents verwendet man die folgende Programmiertechnik:
Man definiert in einer Funktion (der soganannten Callbackfunktion), was beim Drücken einer Maustaste geschehen soll. Diese Funktion wird im eigenen Programmcode nie explizit aufgerufen, sondern beim Auftreten eines Mausevents automatisch vom System. Dazu muss man dem System bekannt geben, wie sie heisst. Man nennt dies auch "Registrieren des Callbacks").
Beispiel 1: Mit Mausklicks Kreise zeichnen
Die Callbackfunktion onMousePressed(x, y) zeichnet an der Position des Mausklicks einen kleinen Kreis. Diese Funktion wird beim Aufruf von makeGPanel() mit einem sogenannten benannten Parameter mousePressed = onMousePressed registriert.
Der Name der Callbackfunktion kann frei gewählt werden. Der Name des benannten Parameters, mit welchem die Callbackfunktion in makeGPanel() registriert wird, muss aber mousePressed oder mouseClicked heissen.
Beispiel 2: Eine Mausbewegung erfassen
Ein Callback, der mit dem Parameter mouseMoved registriert wird, reagiert auf die Mausbewegungen.
Falls er mit dem Parameter mouseDragged registriert wird, reagiert er auf Mausbewegungen mit gedrückter Maustaste.
Im Beispiel entstehen durch eine Mausbewegung mit gedrückter Maustaste lustige röhrenartige Figuren.
Beispiel 3: Zeichnen mit gedrückter Maustaste
Mit Mausevents kann man ein einfaches Zeichnungsprogramm erstellen. Dazu verwendet man die Funktion draw(x, y) die bei jedem Aufruf der Callbackfunktion onMouseDragged() eine Linie zur aktuellen Mausposition zeichnet (und den Grafikcursor auf x, y setzt). Den Callback onMousePressed() benötigt man, um den Grafikcursor jeweils an die aktuelle Mausposition zu setzten.
Die beiden Callbackfunktionen werden beim Erzeugen des GPanels mit benannten Parametern gleichzeitig registriert.
Im Beispiel zeichnest du zuerst ein 8x8 Gitter. Mit Mausklicks kannst du danach die Gitterfelder mit der Funktion fill(x, y, "white", "red")
rot färben, wobei (x, y) die Position des Mausklicks, white die alte und red die neue Farbe ist.
Programm:
# Gp9d.pyfrom gpanel import *
def drawGrid():
for k in range(8):
for i in range(8):
rectangle(i, k, i + 1, k + 1)
def onMousePressed(x, y):
fill(x, y, "white", "red")
makeGPanel(-1, 9, -1, 9, mousePressed = onMousePressed)
drawGrid()
# Gp9e.pyfrom gpanel import *
def drawGrid():
for k in range(8):
for i in range(8):
rectangle(i, k, i + 1, k + 1)
def onMousePressed(x, y):
if isLeftMouseButton():
fill(x, y, "white", "red")
if isRightMouseButton():
fill(x, y, "red", "white")
makeGPanel(-1, 9, -1, 9, mousePressed = onMousePressed)
drawGrid()
In einer Callbackfunktion definierst du, was geschehen soll, wenn eine Maustaste gedrückt oder eine Maus bewegt wurde. Diese Funktion wird nicht vom Programm, sondern direkt vom System aufgerufen, wenn ein solches Ereignis (Event) eingetreten ist. Die Callbackfunktion muss beim Erzeugen des GPanels registriert werden.
Das Drücken einer Maustaste kann man mit zwei verschiedenen Callbacks erfassen: einem Press-Event oder einem Click-Event. Der Click-Event wird erst ausgelöst, nachdem die Taste wieder losgelassen wird, der Press-Event bereits beim Drücken der Maustaste. Der Click-Event wird mit dem Parameter mouseClicked registriert.
Die Mausbewegung wird mit dem Parameter mouseMoved oder mit dem Parameter mouseDragged (Bewegung mit gedrückter Maustaste) registriert.
ZUM SELBST LÖSEN
1)
An der Position des Mausklicks entsteht ein kleiner Punkt und eine Linie zum vorangehenden Punkt.
2)
Im Kapitel Funktionen hast du gelernt, wie man Sterne zeichnet. Bei jedem Mausklick soll an der Mausposition ein Stern entstehen.
3)
Programmiere ein einfaches Tic-Tac-Toe Game.
Zwei Spieler zeichnen abwechlungsweise rote und grüne Quadrate mit dem Ziel eine Reihe, Spalte oder Diagonale zu erreichen.