deutsch     english     français     Drucken

 

 

3.3 MAUS - EVENTS

 

 

 

EINFÜHRUNG

 

Bei Applikationen mit einer grafischen Benutzeroberfläche (GUI) wird der Programmablauf in der Regel durch Ereignisse (Events) gesteuert. Solche Programme laufen nicht mehr sequentiell ab, da die Ereignisse jeder Zeit vorkommen können.

Wenn du einen Mausklick machst oder mit die Maus mit gedrückten Maustaste bewegst, wird diese vom System registriert und und es wird sogenanne Callbackfunktion aufgerufen. Solche Callbackfunktionen kannst du selbst programmieren, d.h. du kannst der Turtle sagen, was sie bei einem Mausklick oder Mausbewegung tun soll.

 

 

AUF MAUSKLICK REAGIEREN

 

Im ersten Beispiel kannst du mit jedem Mausklick an der aktuellen Mausposition ein grüner Kreis zeichnen.


Die Callbackmethode mousePressed wird mit
p = GPanel(mousePressed = mousePressed)
im GPanel registriert.

 

In der Funktion mousePressed() definierst du, was bei einem Mausklick geschehen soll. Die aktuellen Koordinaten des Mausklicks kannst du in den Variablen x, y gespeichern. Dabei werden mit toWindowX() und to WindowY() die Bildschirmkoordinaten in die GPanel-Koordinaten konvertiert. An der Position (x, y) wird dann ein kleiner Kreis gezeichnet.

from gpanel import *
makeGPanel(0, 400, 0, 400)

for y in range(0, 400, 10):
    for x in range(0, 400, 10):
        setColor(getRandomX11Color())
        move(x + 5, y + 5)
        fillRectangle(10, 10)
        delay(1)        

Programmcode markieren (Ctrl+C kopieren, Ctrl+V einfügen)

 

 

 

 

MAUS BEWEGUNG ERFASSEN

 

Jetzt kannst du ein einfaches Freihand-Zeichnungs- programm programmiern. Wenn du die Maus mit gedrückte Maustaste bewegst, wird die Mausbewegung erfasst und eine Spur gezeichnet.

Um die Mausevents zu erfassen, verwenden verwenden wir die Funktionen mousePressed() und mouseDragged().


Die beiden Callbackfunktionen werden mit:

im GPanel registriert.

 

Das Zeichnen erfolgt mit folgendem Trick: Du klickst zuerst irgendwo im Fenster - das ist der Startpunkt (x0, y0), dann bewegst du die Maus. Bei jeder kleinsten Bewegung werden die neuen Koordinaten x1 und y1 erfasst und eine kleine Verbindungslinie zwischen dem Startpunkt und dem neuen Punkt gezeichnet. Dann wird der neue Punkt zu (x0, y0) und wieder ein neuen Punkt (x1, y1) erfasst.


Achtung: Die Koordinaten x0, y0 müssen als global definiert werden, damit sie aus der Methode mousePressed() an die Methode mouseDragged() übergeben werden können.

 

from gpanel import *

def drawStone(x, y):
    setColor(getRandomX11Color())
    move(x + size/2, y + size/2)
    fillRectangle(size, size)

makeGPanel(0, 400, 0, 400)

size = 50

for x in range(0, 400, size):
    for y in range(0, 400, size):
        drawStone(x, y)      

Programmcode markieren (Ctrl+C kopieren, Ctrl+V einfügen)

 

 

 

AUFGABEN

 
1. Zeichne ein rot gefülltes Rechteck. Per Mausklick soll die Farbe auf grün wechseln, beim nächsten Klick wieder auf rot usw.
2.
Zeichne mit Hilfe des Befehls draw() Linien vom Mausklick zum Mausklick  

3*.

Zeichne Rechtecke durch ziehen der Maus. Die Grösse wird mit gedrückter Maustaste festgelegt. Beim loslassen der Maustaste wird das Rechteck definitir gezeichent.