Deutsch   English   Français   

9. Mausevents

 

 

TU APPRENDS ICI...

 

Écrire des programmes qui réagissent aux clics de souris ou aux mouvements de la souris. Ce concept de programmation est notamment utilisé dans les programmes ayant une interface graphique utilisateur.

 

 

EXEMPLES

 

Pour les événements de la souris, on utilise la technique de programmation suivante: On définit dans une fonction (la fameuse fonction de rappel, ou callback) ce qui doit se passer lors de l'appui sur un bouton de la souris. Cette fonction n’est jamais appelée explicitement dans ton propre code, mais est automatiquement appelée par le système lorsqu’un événement de souris se produit. Pour cela, il faut informer le système de son nom. On appelle cela enregistrer le callback.

Example 1: Dessiner des cercles avec les clics de souris
La fonction callback onMousePressed(x, y)dessine un petit cercle à la position du clic. Cette fonction est enregistrée lors de l’appel de makeGPanel() via un paramètre nommémousePressed = onMousePressed registriert.

Le nom de la fonction callback peut être choisi librement. Le nom du paramètre nommé, par lequel la fonction callback est enregistrée dans makeGPanel(), doit toutefois être mousePressed ou mouseClicked.

 

Programm:    

# Gp9a.py

from gpanel import *

def onMousePressed(x, y):
    pos(x, y)    
    fillCircle(1)

makeGPanel(0, 20, 0, 20, mousePressed = onMousePressed)
setColor("cyan")
Copy to clipboard

 

Example 2: Capturer un mouvement de la souris
Un callback enregistré avec le paramètre mouseMoved réagit aux mouvements de la souris. S’il est enregistré avec le paramètre mouseDragged, il réagit aux mouvements de la souris avec le bouton enfoncé.

Dans l’exemple, des dessins amusants en forme de tubes apparaissent lors d’un déplacement avec le bouton enfoncé.

 

Programme:     

# Gp9b.py

from gpanel import *      

def onMouseDragged(x, y):
    pos(x, y)
    setColor("cyan")
    fillCircle(.04) 
    setColor("black")
    circle(.04)  

makeGPanel(mouseDragged = onMouseDragged)
Copy to clipboard


Example 3: Dessiner avec le bouton enfoncé
Avec les événements de souris, on peut créer un simple programme de dessin. On utilise la fonctiondraw(x, y) qui, à chaque appel de la fonction callback onMouseDragged(), trace une ligne vers la position actuelle de la souris (et place le curseur graphique sur x, y). Le callback onMousePressed()est nécessaire pour repositionner le curseur graphique à la position actuelle de la souris.
 

Les deux callbacks sont enregistrés en même temps lors de la création du GPanel avec des paramètres nommés.

Programme:     

# Gp9c.py

from gpanel import *

def onMousePressed(x, y):
    pos(x, y)

def onMouseDragged(x, y):
    draw(x, y)

makeGPanel(mousePressed = onMousePressed, 
           mouseDragged = onMouseDragged)
Copy to clipboard

 

Example 4: Remplir des zones avec des clics

Dans l’exemple, tu dessines d’abord une grille 8x8. Ensuite, avec des clics, tu peux remplir les cases de la grille avec la fonction
fill(x, y, "white", "red")
"white", "red") en colorant en rouge, où (x, y) est la position du clic, white est l’ancienne couleur et red la nouvelle couleur.

 

Programme:     

# Gp9d.py

from 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()
Copy to clipboard
 


 

Example 5: Utiliser le clic gauche et le clic droit

Avec le clic gauche, les carrés deviennent rouges; avec le clic droit, la marquage est effacé. isLeftMouseButton(): Renvoie True si le bouton gauche est enfoncé.

isLeftMouseButton(): Renvoie True si le bouton gauche est enfoncé. Renvoie True si le bouton droit est enfoncéGibt True zurück, wenn die rechte Maustaste gedrückt wurde
 

Programme:    

# Gp9e.py

from 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()
Copy to clipboard

 

 

À RETENIR...

 

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.

 

 

 

À FAIRE PAR TOI-MÊME

 

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.