Gestion du clavier
.
Déplacement d'un objet avec le 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()
|
---|
Touches du clavier |
Déplacement d’une balle avec les flèches du clavier. |
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.
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. |
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 |
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))
|
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: |
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 |
|
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 |
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 | ↑ |