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()