Gestion de la souris et du clavier

La bibliothèque upemtk fournit pour l’instant des commandes simples permettant uniquement de gérer les clics de souris ou l’appui sur les touches du clavier. La gestion du clavier et de la souris peut se faire au moyen de la boucle suivante:

from upemtk import *

cree_fenetre(400,400)
while True:
    evenement = donne_evenement()
    type_ev = type_evenement(evenement)

    # Code traitant l'évènement

    mise_a_jour()    
ferme_fenetre()

À intervalles réguliers, ce programme récupère avec la fonction donne_evenement() le premier événement qui s’est produit sur la fenêtre depuis le dernier appel à cette fonction, ou un événement vide indiquant l’absence d’un autre événement. Cette fonction renvoie en fait un objet représentant un événement, comme par exemple un clic droit au point de coordonnées (50,50).

Si ev est un tel objet, l’appel type_evenement(ev) renvoie une chaîne de caractères représentant le type de l’événement ev. Il y a quatre types d’événements :

  • 'Touche' lorsque l’évènement est un appui sur une touche ;
  • 'ClicGauche' lorsque l’évènement est un clic gauche ;
  • 'ClicDroit' lorsque l’évènement est un clic droit ;
  • 'RAS' lorsqu’il ne s’est rien passé.

Le programme ci-dessous affiche le type de tous les évènements enregistrés (on ne peut pas afficher directement evenement qui est un objet python):

from upemtk import *

cree_fenetre(400,400)

while True:
    evenement = donne_evenement()
    type_ev = type_evenement(evenement)
    print(type_ev)

ferme_fenetre()

Le problème de ce programme est que, la plupart du temps, l’évènement est de type 'RAS'. La version ci-dessous n’affiche que les vrais évènements.

from upemtk import *

cree_fenetre(400,400)

while True:
    evenement = donne_evenement()
    type_ev = type_evenement(evenement)
    if type_ev!='RAS': 
        print(type_ev)

ferme_fenetre()

Avertissement

Pour que les frappes au clavier soient prises en compte, il faut que la fenêtre ait le focus.

Nous allons maintenant voir comment traiter les évènements récupérés.

Événement 'Touche'

Lorsque l’évènement ev est de type 'Touche', on peut utiliser la fonction touche(ev) qui renvoie une chaîne de caractères donnant le nom de la touche qui a été pressée. Le programme ci-dessous affiche le nom de toutes les touches pressées.

from upemtk import *

cree_fenetre(400,400)
while True:
    evenement = donne_evenement()
    type_ev = type_evenement(evenement)

    if type_ev == 'Touche':
        print(touche(evenement))

    mise_a_jour()    
ferme_fenetre()

Par exemple, on peut voir que:

  • la touche A a pour nom 'a'
  • la barre d’espace a pour nom 'space'
  • la flèche droite a pour nom 'Right'
  • la flèche gauche a pour nom 'Left'
  • la flèche du haut a pour nom 'Up'
  • la flèche du bas a pour nom 'Down'

Le programme suivant permet de déplacer une carré sur la fenêtre avec les flèches.

from upemtk import *

cree_fenetre(400,400)

# coordonnées du coin supérieur gauche du carré
x = 0
y = 0
taille = 10
# déplacement pour une touche pressée
dep=5
while True:
    effaceTout()
    rectangle(x,y,x+taille,y+taille,"red","red")
    evenement = donne_evenement()
    type_ev = type_evenement(evenement)
    # deplacement du carré
    dx = 0
    dy = 0
    if type_ev == 'Touche':
        nom_touche = touche(evenement)
        if nom_touche == 'Left':
            dx = max(-dep,-x)
        elif nom_touche == 'Right':
            dx = min(dep,399-x-taille)
        elif nom_touche == 'Down':
            dy = min(dep,399-y-taille)
        elif nom_touche == 'Up':
            dy = max(-dep,-y)
        x = x+dx
        y = y+dy
        
    mise_a_jour()    
ferme_fenetre()

Événement 'ClicDroit' ou 'ClicGauche'

Pour connaître les coordonnées correspondant à un événement de type 'ClicDroit' ou 'ClicGauche', on utilise les fonction clic_x(evenement) et clic_y(evenement).

Par exemple, le programme suivant affiche les coordonnées des points cliqués.

from upemtk import *

cree_fenetre(400,400)
while True:
    evenement = donne_evenement()
    type_ev = type_evenement(evenement)
    if type_ev == "ClicDroit": 
        print("Clic droit : (" + str(clic_x(evenement)) + "," + str(clic_y(evenement)) + ")")
    elif type_ev == "ClicGauche": 
        print("Clic gauche : (" + str(clic_x(evenement)) + "," + str(clic_y(evenement)) + ")")
    mise_a_jour()    

ferme_fenetre()

Autres fonctions

Avertissement

Cette page est en cours de rédaction.

upemtk.attente_clic()

Attend que l’utilisateur clique sur la fenêtre et renvoie un triplet ( x, y, type_clic), où x et y sont l’abscisse et l’ordonnée du point cliqué, et type_clic une chaîne valant 'ClicGauche' ou 'ClicDroit' selon le type de clic effectué.

Renvoie : un triplet (x, y, 'ClicDroit') ou (x, y, 'ClicGauche') .

upemtk.attente_touche()

Attend jusqu'à ce que l'utilisateur appuie sur une touche et la renvoie sous forme de chaîne de caractères.

Renvoie : une chaîne de caractère correspondant à la touche appuyée.

upemtk.attente_touche()

Attend jusqu'à ce que l'utilisateur appuie sur une touche et la renvoie sous forme de chaîne de caractères.

Renvoie : une chaîne de caractère correspondant à la touche appuyée.

upemtk.attente_touche(millisecondes)

Attend au maximum le nombre de millisecondes indiqué en paramètre jusqu'à ce que l'utilisateur appuie sur une touche et la renvoie sous forme de chaîne de caractères. Si le temps est écoulé avant qu'une touche soit appuyée, cette fonction renvoie None.

Renvoie : une chaîne de caractère correspondant à la touche appuyée ou None.

Voici un exemple d'utilisation.

from upemtk import *
from time import time

cree_fenetre(400, 400)

temps_fin = time() + 10
while time()<temps_fin:
    touche = attente_touche(1000)
    if touche == None:
        continue
    if touche in {'Left','Right','Up','Down'}:
        print(touche)
    else:
        print("pas une direction")
        ferme_fenetre()
        quit()

print("temps écoulé")
ferme_fenetre()
upemtk.attente_clic_ou_touche()

Attend que l’utilisateur clique sur la fenêtre ou appuie sur une touche. La fonction renvoie un triplet de la forme (x, y, type) si l’événement est un clic de souris de type type et de coordonnées (x, y), ou (-1, touche, type) si l’événement est un appui sur la touche val.

Renvoie : (x, y, 'ClicDroit'), (x, y, 'ClicGauche') ou (-1, val, 'Touche').

upemtk.donne_evenement()

Renvoie l’événement associé à la fenêtre.

upemtk.type_evenement(evenement)

Renvoie une chaîne donnant le type de evenement. Les types possibles sont ClicDroit, ClicGauche, Deplacement, Touche ou RAS.

upemtk.touche(evenement)

Renvoie une string correspondant à la touche associé à evenement qui doit être de type Touche.

upemtk.clic_x(evenement)

Renvoie la coordonnée X associé à evenement qui doit être de type ClicDroit ou ClicGauche ou Deplacement

upemtk.clic_y(evenement)

Renvoie la coordonnée Y associé à evenement, qui doit être de type ClicDroit ou ClicGauche ou Deplacement.