M – Événements : clavier et souris

Transcription

M – Événements : clavier et souris
Informatique et sciences du numérique
Lycée Pierre Émile Martin
M – Événements : clavier et souris
On désigne par « événement » l'appui sur une touche du clavier, un clic ou un déplacement de souris.
La méthode bind( ) permet de lier ces événements à un widget et une action.
En voici la syntaxe : widget.bind( 'événement ', fonc)
Remarques :
- La fonction doit obligatoirement être déclarée avant son déclenchement dans le code du programme.
- De plus elle a obligatoirement un paramètre evt : « def fonc(evt) :
»
Ce dernier ( on peut changer le nom de evt) permet de récupérer les informations de l’événement.
Ex M1 : Taper le programme suivant, l'enregistrer et l'exécuter.
from Tkinter import*
def pointeur(evt):
position.configure(text="Clic détecté en X = "+str(evt.x)+", Y = "+str(evt.y))
fen=Tk()
fond=Canvas(fen, width=200, height=150, bg="light yellow")
fond.pack()
position=Label(fen,text="Clic détecté en X =''+'','' Y = '')
position.pack()
fen.bind("<Button-1>", pointeur)
fen.mainloop()
- La méthode bind() associé à la fenêtre fen lie l’événement clic-gauche ( <Button-1> ) à la fonction 'pointeur'.
Celle ci récupère les coordonnées de l'objet evt par les instructions evt.x et evt.y
- La méthode mainloop() placée à la fin surveille globalement le déclenchement des événements.
Quelques noms d'événements « Clavier » que l'on peut surveiller : à mettre entre guillemets.
<KeyPress>
Appuie d'une touche quelconque du clavier
<KeyRelease>
Relâchement d'une touche quelconque du clavier
a, A, 1, 2, +, * , …
Surveille les touches indiquées.
<Right>, <Down>,<Up>, <Left>
On peut combiner ces touches par un tiret : '<Controle-Up>'
<Alt>,<Shift>,<Control>
Quelques noms d’événements « Souris »
<ButtonPress-1>
Appui sur le bouton gauche de la souris
<ButtonRelease-2>
Relâchement du bouton gauche de la souris
<Double-Button-1>
Double clic sur le bouton gauche.
<Motion>
Déplacement de la souris
<B1-Motion>
Déplacement de la souris avec le bouton gauche appuyé.
<Enter>
Entrée dans le widget de la souris
<Leave>
Sortie du widget de la souris
Informatique et sciences du numérique
Lycée Pierre Émile Martin
Quelques fonctions qui récupérent les informations de evt dans la fonction appelée.
evt.char
Renvoie le caractère de la touche appuyée
evt.keysym
Renvoie une chaîne avec le nom de la touche appuyée :
Escape, space, Up, Down, Left, Right, F1, Return, …....
evt.x evt.y
Renvoient respectivement l'abscisse et l'ordonnée de la souris lors d'un clic.
evt.num
evt.widget
Renvoie le numéro du bouton (enfoncé ou relâché)
Renvoie le widget sur lequel l'action a été déclenchée
Ex M2 :
Reprendre L3 et faire déplacer le père noël avec les touches flèches gauche et droites du clavier..
Informatique et sciences du numérique
Lycée Pierre Émile Martin
Éléments de réponses
Si vous êtes bloqués, pour vérifier ou comparer
M2
from Tkinter import *
import random
fenetre=Tk()
fenetre.title("Bataille de boules de neige")
fenetre.geometry("800x400")
# Le Canvas de fond
Fond=Canvas(fenetre,width=800,height=400,bg="black")
Fond.place(x=0,y=0)
# Une fonction pour les Lignes
def lignes():
for i in range(10) :
Fond.create_line(0,i*10,400,i*5,fill='green')
Fond.create_line(400,i*5,800,i*10,fill='green')
# Une fonction pour les Boules de neige
def boules():
for i in range(200) :
d=random.randint(2,20)
x=random.randint(0,800)
y=random.randint(50,400)
Fond.create_oval(x,y,x+d,y+d,fill='white')
# fonctions de direction : gèrent les événements
def droite(evt) :
global x
x=x+10
Fond.coords(bonhomme,x,y)
Fond.itemconfig(bonhomme,image=im_bonhomme)
def gauche(evt) :
global x
x=x-10
Fond.coords(bonhomme,x,y)
Fond.itemconfig(bonhomme,image=im_bonhommeG)
###--------------- corps du programme---------------###
boules()
lignes()
# Le bonhomme de neige
x,y=400,350
im_bonhomme=PhotoImage(file='bonhomme.gif')
im_bonhommeG=PhotoImage(file='bonhommeG.gif')
bonhomme=Fond.create_image(x,y, image=im_bonhomme)
Fond.create_text(400,200,text="Bataille de boules de neige !",font=("Arial",30), fill='yellow')
# La détection des événements : remplacent les boutons de direction
fenetre.bind("<Right>", droite)
fenetre.bind("<Left>", gauche)
fenetre.mainloop()

Documents pareils