on utilise
Pour les touches classiques(0 ; E ; ..Z) |
widget.bind(evenement,fonction)
|
widget peut être la fenêtre principale. |
evenement est une chaîne de caractère, par exemple pour le clavier, |
evenement= <Key> ou <Shift>
|
fonction doit être est le nom de la fonction qui s’exécute lorsque l’évènement se déclenche, elle doit être déclarée en demandant un paramètre en entrée : |
def fonction (event)
|
Nom |
Description |
---|---|
E.get()
|
Renvoi le texte saisi. |
<Activate>
|
Un widget est passé de l’état inactif à l’état actif. Se rapporte au changement de l’option state des widgets comme un bouton qui est inactif (grisé) et devient actif. |
<Button>
|
L’utilisateur a appuyé sur l’un des boutons de la souris. La partie détail précise le bouton. Pour la molette de la souris sous Linux, votre gestionnaire distinguera le défilement vers le haut et le défilement vers le bas en examinant l’attribut .num de l’instance d’événement qui lui est fourni |
<ButtonRelease>
|
L’utilisateur relâche un bouton de la souris. C’est probablement un meilleur choix dans la plupart des cas d’utiliser ce type d’événement plutôt que Button parce que si l’utilisateur appuie accidentellement sur le bouton, il peut bouger la souris en-dehors du widget pour éviter de lancer l’action. |
Configure
|
L’utilisateur a modifié la taille d’un widget, par exemple en déplaçant un coin ou un côté de la fenêtre. |
<Enter>
|
L’utilisateur a bougé la souris qui est entrée dans la partie visible d’un widget. (Ne pas confondre avec la touche Entrée, qui est un événement de type KeyPress pour une touche dont le nom est “Return”). |
<KeyPress>
|
L’utilisateur a appuyé sur une touche du clavier. La partie détail précise optionnellement une touche en particulier. Ce mot clé peut être abrégé par <Key>. |
<KeyRelease>
|
L’utilisateur a relâché une touche du clavier. |
<Leave>
|
L’utilisateur a déplacé le pointeur de la souris en dehors d’un widget. |
<Motion>
|
L’utilisateur a déplacé la souris à l’intérieur d’un widget. |
<MouseWheel>
|
L’utilisateur a tourné la molette de la souris, vers le haut ou vers le bas. Pour l’instant, cela n’est pris en compte que par Windows |
.
évènement |
Déclenché lorsque |
---|---|
![]() |
La souris est déplacée. |
![]() |
Le bouton gauche est enfoncé. ( 2 : bouton du milieu, 3 : bouton droit) |
![]() |
Le bouton gauche est relâché. ( 2 : bouton du milieu, 3 : bouton droit) |
![]() |
Double-clic avec le bouton gauche. ( 2 : bouton du milieu, 3 : bouton droit) |
![]() |
La souris est déplacée alors que le bouton gauche est maintenu enfoncé |
![]() |
La souris entre sur le widget. |
![]() |
La souris sort du widget. |
Détection
Utilisation des commandes de la souris :
Détection d’un clic de souris :
1201 détection d’un clic de souris.py
# 0801 detection d'un clic de souris.py
# Détection et positionnement d'un clic de souris dans une fenetre :
from tkinter import *
def clic(event,can):
x,y=event.x,event.y
can.create_text(x,y,text= "Clic détecté en\n (X ,Y)= ("+str(x)+";"+str(y)+")")
fenetre = Tk()
fenetre.configure(bg='light green')
fenetre.title("detection d'un clic de souris")
fenetre.geometry("400x150")
can=Canvas(fenetre,width=400,height=150,bg='light green')
can.grid(row=0,column=0)
can.bind("<Button-1>",lambda event: clic(event,can))
fenetre.mainloop()
|
![]() |
Progamme |
---|
#1202 bouger_dessins.py
from random import randrange
from tkinter import *
#module de construction de fenetres
def creer_fenetre(fenetre,taille,titre,couleur):
#modifie une fenêtre#
fenetre.title(titre)
fenetre.geometry(taille)
fenetre.configure(bg=couleur)
fenetre.resizable(height=False,width=False)
return fenetre
def nettoie_fenetre(fenetre,can,liste_widgets):
can.delete(ALL)
for w in liste_widgets:w.destroy()
return fenetre,can
def geoliste(g):
r=[i for i in range(0,len(g)) if not g[i].isdigit()]
return [int(g[0:r[0]]),int(g[r[0]+1:r[1]]),int(g[r[1]+1:r[2]]),int(g[r[2]+1:])]
# exemple d'utilisation:
couleurs = ['snow','old lace','blanched almond', 'bisque',
'slate grey', 'light slate gray', 'light slate grey', 'gray',,
'royal blue', 'blue', 'dodger blue', 'deep sky blue', 'sky blue',
'dark goldenrod', 'rosy brown', 'indian red', 'saddle brown',
'tomato', 'orange red', 'white', 'hot pink', 'deep pink', 'pink',
'dark blue', 'dark cyan', 'dark magenta', 'dark red', 'light green']
def souris_clic(event,can):
#Met en avant l'objet sélectionné
x1=event.x
y1=event.y
objet=can.find_closest(x1,y1)
can.itemconfig(objet,width=5)
can.lift(objet)
can.bind("<Button1-Motion>",lambda event :souris_deplace(event,x1,y1,can,objet))
def souris_deplace(event,x1,y1,can,objet):
#Effectue le déplacement des objets
x2=event.x
y2=event.y
dx,dy=x2-x1,y2-y1
x1,y1=x2,y2
can.coords(objet,x2,y2,x2+40,y2+40)
x1,y1=x2,y2
can.bind("<Button1-ButtonRelease>",lambda event:souris_releve(event,x2,y2,can,objet))
def souris_releve(event,x2,y2,can,objet):
#Remet l'objet dans sa configuration initiale
can.itemconfig(objet,width=1)
can.coords(objet,x2,y2,x2+30,y2+30)
can.bind("<B1-Motion>", lambda event:souris_clic(event,can))
nbrecouleurs=len(couleurs)
#-------------- programme principal ------------------#
fenetre=Tk()
titre="Déplacement d'un objet par la souris "
couleur='white'
largeur,hauteur,cote=660,460,30
ligne,colonne=hauteur//int(20+1.2*cote),largeur//(20+2*cote)
taille=str(largeur+20)+'x'+str(hauteur+80)
fenetre=creer_fenetre(fenetre,taille,titre,couleur)
can = Canvas(fenetre, width =largeur, height =hauteur, bg ='white')
can.grid(row=0,column=0)
m1="Pour déplacer les objets à l'aide de la souris\n"
m2="Appuyer sur le bouton droit de la souris\n"
m3="Laisser le bouton droit enfoncé pour\n "
m4="que l'objet suive la souris"
message1=m1+m2+m3+m4
message=Label(fenetre,text=message1,font='verdana 10 bold',fg='blue')
message.grid(row=1,column=0)
for i in range(colonne):
x4=10+ i*2*(cote+20)
x5=x4+cote+20
for j in range(ligne):
y4=10+j*1.2*(20+cote)
y5=y4
coul =couleurs[randrange(nbrecouleurs)]
if (i+j)%2==0:
can.create_rectangle(x4, y4, x4+cote, y4+cote, fill =coul,activefill="red")
elif (i+j)%2==1:
can.create_oval(x4, y4, x4+cote, y4+cote, fill =coul,activefill="red")
can.bind("<Button-1>",lambda event:souris_clic(event,can))
fenetre.mainloop()
|
Déplacer des objets à l’aide de la souris : Nous allons voir maintenant comment déplacer des objets à l’aide de la souris. Déplacer des objets à l’aide de la souris : Nous allons voir maintenant comment déplacer des objets à l’aide de la souris. Vidéo : video mp4 by EasyHtml5Video.com v3.9.1 |
.
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 | ↑ |