gestion du clavier
Déplacement d'un objet avec le clavier Touches du clavier
#Déplacement d'un objet avec le clavier #1101-deplacement-fleche.py from tkinter import * def creer_fenetre(fenetre,titre,taille): "modifie une fenêtre" fenetre.title(titre) fenetre.geometry(taille) return fenetre def nettoie_fenetre(fenetre,can,liste_widgets): can.delete(ALL) for w in liste_widgets:w.destroy() return fenetre,can def avancer(b1,b2,objet): #procédure d'avancement global x1,y1,x2,y2 futurx,futury=x2+b1,y2+b2 if futurx>480 or futurx<10: b1=-b1 futurx=b1+x2 if futury>400 or futury<10: b2=-b2 futury=b2+y2 x2,y2=futurx,futury can.coords(objet,x2,y2,x2+30,y2+30) def touche(event,distance,objet): #code reçoit le n° de la touche"" code=event.keycode if code==38: # Up avancer(0,-distance,objet) elif code==40: # Down avancer(0,distance,objet) elif code==37: #Left avancer(-distance,0,objet) elif code==39: #Right avancer(distance,0,objet) #------ Programme principal ------- x1, y1 = 40, 40 x2,y2=x1,y1 distance=10 fenetre = Tk() titre="Déplacement avec les flèches" taille="500x550" fenetre=creer_fenetre(fenetre,titre,taille) regle="Appuyer sur les flèches\n du clavier\n pour faire bouger la balle\n " regle2=chr(11013)+' '+chr(10145)+' '+chr(11015)+' '+chr(11014) regle=regle+regle2 texte0=Label(fenetre, text=regle,font="arial 16 bold",fg="blue",bg='white') can = Canvas(fenetre,bg='light blue',height=480,width=500) objet = can.create_oval(x1,y1,x1+30,y1+30,width=2,fill='red') can.grid(row=2,column=0,columnspan=2) texte0.grid(row=0,column=0,sticky=E) fenetre.bind_all('<Key>',lambda event:touche(event,distance,objet)) fenetre.mainloop()
Déplacement d’une balle avec les flèches du clavier.
_images/clavier120.gif
_images/up.PNG

Remarques :

On peut demander au gestionnaire d’évènements de surveiller (ou d’exécuter) les actions sur :

Certaines touches. Plusieurs touches simultanément. Exécute la fonction lorsqu’une touche est enfoncée. Exécute la fonction lorsque la touche est relâchée.

EVENEMENT :

A chaque fois qu’une touche est enfoncée (ou relâchée), c’est un évènement qui est déclenché. La méthode mainloop () que l’on place toujours en fin de programme déclenche le gestionnaire d’évènements.

On veut surveiller un évènement clavier :

E est le nom du widget et fenetre la fenêtre

Sur un widget Entry : Sur la fenêtre entière :
E.bind("<Key>«, fonction)
fenetre.bind ("<Key>",fonction)
Propriété retour
event.char
Renvoie le caractère correspondant à la touche enfoncé ligne 9
event.keysym
Renvoie une chaîne de caractères contenant le symbole correspondant à la touche enfoncée
event.keycode
Renvoie un entier contenant le code correspondant à la touche enfoncé
event.widget
Renvoie le widget sur lequel l’action a été déclenchée.
WIDGET entry

Rappel des méthodes du widget Entry :

Méthode Effet
E.get()
Renvoi le texte saisi.
E.insert(i,T)
Insère le texte T dans l’Entry E à la position i.
E.insert(INSERT,T)
Insère le texte T dans l’Entry E à la place du curseur.
E.insert(END,T)
Insère le texte T dans l’Entry E à la fin du contenu existant.
E.delete(i)
Efface un le caractère à la position i de l’Entry E.
E.delete(deb,fin)
Efface les caractères placés entre les indices deb et fin de l’Entry E. lignes 8 et 17
E.delete(0,END)
Efface l’intégralité du champ texte.
E.focus()

Donne la priorité au widget lignes 19 et 36

KEYCODE

Pour les touches classiques(0 ; E ; ..Z) on utilise le

keycode

correspondant au code ASCII de la lettre ou du nombre, la fonction

chr (i)

donne comme résultat le caractère correspondant au nombre i. La fonction qui donne le code ASCII d’un caractère est ord(« a ») qui renvoie pour la lettre a le nombre 97.

code ASCII :

# code ASCII.py

print("code ASCII :")

for i in range(33,400):

      if (i-33)%5!=0:

            print(" ",i," =",chr(i),end=" ;" )

      else:print(" ", i,"= ",chr(i))

     

 

GESTION CLAVIER

.
Exemple 1001 : gestion clavier
# gestion clavier entry.py from tkinter import * def creer_fenetre(fenetre,titre,taille,couleur): "modifie une fenêtre" fenetre.title(titre) fenetre.geometry(taille) fenetre.configure(bg=couleur) return fenetre def nettoie_fenetre(fenetre,can,liste_widgets): can.delete(ALL) for w in liste_widgets:w.destroy() return fenetre,can def attend_reponse(event,reponse): #receptionne le caractère de la touche du clavier rep=" " affiche.config(text=rep) reponse.delete(0,11) touche=event.char rep=" Appuyer sur la touche Entrée" affiche.config(text=rep) reponse.bind("<Return>",lambda utile:valide_reponse(utile,touche,reponse)) def valide_reponse(utile,touche,reponse): #Affiche la rèponse après l'action de la touche entrèe rep=" Vous avez appuyé sur la touche : "+touche affiche.config(text=rep) reponse.delete(0,11) reponse.insert(0,"Insérer") reponse.focus() reponse.bind("<Key>",lambda event:attend_reponse(event,reponse)) #---------------------------------------------------------------------# largeur,hauteur=450,150 taille=str(largeur)+'x'+str(hauteur) titre="Gestion clavier" couleur="khaki" ft='verdana 12 bold' #----------------------------------------------------------------------# fenetre = Tk() fenetre=creer_fenetre(fenetre,titre,taille,couleur) indication = Label(fenetre,font=ft, bg='khaki',text ='Appuyer sur une touche ') reponse = Entry(fenetre, font=ft,bg ='bisque', fg='red') indication.grid(row =1, sticky =E) reponse.grid(row =1, column =2) affiche = Label(fenetre,bg='khaki',font=ft, text ='') affiche.grid(row =3, sticky =E) reponse.insert(0,"Insérer") reponse.focus() reponse.bind("<Key>",lambda event:attend_reponse(event,reponse)) fenetre.mainloop()

L’illustration:

_images/gestionclavier.gif

SYMBOLES ET CODE :

Tableau des symboles et codes des touches spéciales.

keysym keycode keysym_num Touche
Alt_L 64 65513 La touche Alt située à gauche.
BackSpace 22 65288 La touche Retour Arrière
Caps_Lock 66 65509 Verr Maj
Control_L 37 65507 La touche Ctrl de gauche
Control_R 105 65508 La touche Ctrl de droite
Delete 119 65535 Suppr
Down 116 65364
End 115 65367 Fin
Escape 9 65307 Echap
F1 67 65470 La touche fonction F1
F2 68 65471 La touche fonction F2
Fi 66+i 65469+i La touche fonction Fi
F12 96 65481 La touche fonction F12
Home 110 65360 Début ou ↖
Insert 118 65379 Insér.
Left 113 65361
Linefeed 54 106 Control-J
KP_0 90 65456 0 sur le clavier numérique
KP_1 87 65457 1 sur le clavier numérique
KP_2 88 65458 2 sur le clavier numérique
KP_3 89 65459 3 sur le clavier numérique
KP_4 83 65460 4 sur le clavier numérique
KP_5 84 65461 5 sur le clavier numérique
KP_6 85 65462 6 sur le clavier numérique
KP_7 79 65463 7 sur le clavier numérique
KP_8 80 65464 8 sur le clavier numérique
KP_9 81 65465 9 sur le clavier numérique
KP_Add 86 65451
  • sur le clavier numérique
keysym keycode* keysym_num* Touche
KP_Begin 84 65437 La touche centrale (même que 5) sur le clavier numérique.
KP_Decimal 91 65454 . de la ponctuation décimale, Sur le clavier numérique.
KP_Delete 91 65439 Suppr sur le clavier numérique.
KP_Divide 106 65455 / sur le clavier numérique.
KP_Down 88 65433 ↓ sur le clavier numérique.
KP_End 87 65436 1 ou Fin sur le clavier numérique.
KP_Enter 104 65421 Entrée sur le clavier numérique.
KP_Home 79 65429 ↖ ou début sur le clavier numérique.
KP_Insert 90 65438 Insert sur le clavier numérique.
KP_Left 83 65430 ← sur le clavier numérique.
KP_Multiply 63 65450 \(times \ \)sur le clavier numérique.
KP_Next 89 65435  sur le clavier numérique.
KP_Prior 81 65434 ⇞  sur le clavier numérique.
KP_Right 85 65432 → sur le clavier numérique.
KP_Subtract 82 65453 \(-\) sur le clavier numérique.
KP_Up 80 65431 ↑ sur le clavier numérique.
Next 117 65366
Num_Lock 77 65407 Verr Num
Pause 127 65299 Pause
Print 111 65377 ImprÉcran
Prior 112 65365
Return 36 65293 La touche  Entrée.
Right 114 65363
Scroll_Lock 78 65300 Arrêt Défilement (ScrollLock)
Shift_L 50 65505 La touche   de gauche.
Shift_R 62 65506 La touche   de droite.
space 65 32 La barre espace.
Tab 23 65289 ↹ la touche de Tabulation.
Up 111 65362
educationdunumerique.fr. Tous  droits réservés. D Pérarnaud Limoges.