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
ety
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 typetype
et de coordonnées(x, y)
, ou (-1, touche, type) si l’événement est un appui sur la toucheval
.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 sontClicDroit
,ClicGauche
,Deplacement
,Touche
ouRAS
.
-
upemtk.
touche
(evenement)¶ Renvoie une string correspondant à la touche associé à
evenement
qui doit être de typeTouche
.
-
upemtk.
clic_x
(evenement)¶ Renvoie la coordonnée X associé à
evenement
qui doit être de typeClicDroit
ouClicGauche
ouDeplacement
-
upemtk.
clic_y
(evenement)¶ Renvoie la coordonnée Y associé à
evenement
, qui doit être de typeClicDroit
ouClicGauche
ouDeplacement
.