⇨ MENU ⇨ MODULES ⇨ tkinter ⇨ controles standards ⇨ Events
Les événements dans tkinter
⇨ MENU ⇨ MODULES ⇨ tkinter ⇨ controles standards ⇨ Events
Les événements dans tkinter
DEFINITION.
tkinter permet un grand nombre d'interactions avec l'application gérées par le gestionnaire d'événements
REMARQUES.
Un événement est une action de l'utilisateur, du système ou du programme lui-même, se produisant durant l'exécution de l'application. Il peut s'agir du déplacement de la souris, le clique sur un bouton, une saisie au clavier, la modification d'un controle ou de bien d'autres choses.
A son initialisation, tkinter défini déjà un grand nombre de comportements pour chaque type de controle. Par exemple, le clique gauche de la souris sur un objet bouton de la classe tkinter.Button ( ) déclenche l'appel d'une fonction, si le script le prévoit avec l'attribut command.
En plus de ces comportements induis, tkinter permet au programmeur d'ajouter des réactions en relation avec un ou plusieurs événements, grâce à la gestion des événements via le gestionnaire d'événements.
Vous pouvez lier un ou plusieurs événements sur :
- un controle en utilisant la méthode tkinter.bind ( ) ;
- un type de controle, tous les boutons par exemple, la méthode tkinter.bind_class ( ) ;
- toute l'application, par exemple F1 affiche l'aide, en utilisant la méthode tkinter.bind_all ( ).
Il existe un très grand nombre d’événements différents. Ils portent tous un nom unique, dont la syntaxe doit être scrupuleusement respectée. Le nom de l'événement doit toujours être placé entre guillemets (' ou ") puis entre chevrons (< et >) quand il est passé comme argument à la méthode choisie : tkinter.bind ( ), tkinter.bind_class ( ) ou tkinter.bind_all ( ). La forme générale est de la forme suivante : "<modificateur-type-detail>" où :
- modificateur est une surcharge du type ;
- type pour le périphérie déclenchant l'événement ;
- detail action sur le périphérie.
Certains événements, fréquemment utilisés, possèdent en plus une seconde syntaxe simplifiée. Par exemple "<1>" équivaut à "<Button-1>" et "<h>" équivaut "<Keypress-h>". Dans ce cas, vous pouvez omettre les chevrons pour les touches du clavier qui représentent une lettre, "<h>" peut alors aussi s'écrire "h". Bien que ces types d'écritures soient plus pratiques, elles sont vivement déconseillés.
Quand un événement est déclenché, un objet de type tkinter.Event ( ) est créé, et est passé comme argument à la fonction ou à la méthode appelée, qui doit obligatoirement le prévoir dans sa définition. Voir la classe tkinter.Event ( ) pour plus d'informations.
tkinter offre aussi la possibilité de créer des événements virtuels, en regroupement des événements réels. On peut nommer un tel événement comme on le souhaite, à la condition qu'il soit entouré de 2 chevrons. Par exemple pour nommer un événement virtuel Danger, déclarez-le comme suit : <<Danger>>. Un événement virtuel sera déclenché si l'un au moins des événements qui le compose est réalisé. Pour plus de détail sur la création de ce type d'événement voir la méthode tkinter.event_add ( ).
Voir aussi la classe tkinter.Events ( ) pour plus de détails sur les objet retournés par le gestionnaire d'événements.
LISTE DES MODIFICATEURS.
Alt : si la touche alternative (Alt) du clavier doit être enfoncée.
Any : Quelque soit le détails du type ("<Any-KeyPress>" n'importe quelle touche).
Button ou B : si un bouton de la souris doit être enfoncé.
Button1 ou B1 : si le bouton 1 de la souris doit être enfoncé.
Button2 ou B2 : si le bouton 2 de la souris doit être enfoncé.
Button3 ou B3 : si le bouton 3 de la souris doit être enfoncé.
Button4 ou B4 : si le bouton 4 de la souris doit être enfoncé.
Button5 ou B5 : si le bouton 5 de la souris doit être enfoncé.
Command : Correspond à la touche mac spécifique (Mod1 ou Mod2).
Control : si la touche controle (Ctrl) doit être enfoncée.
Double : si le détail doit se produire 2 fois rapidement (double clique de souris par exemple).
Extended : si la touche spécifique des claviers US-étendu doit être enfoncée.
Lock : si le clavier doit être en mode verrouillage des majuscules.
Meta ou M : si la touche touche avec le logo Windows (ou mac) doit être enfoncée.
Mod1 ou M1 : si la touche Méta 1 (si elle existe) doit être enfoncée.
Mod2 ou M2 : si la touche Méta 2 (si elle existe) doit être enfoncée.
Mod3 ou M3 : si la touche Méta 3 (si elle existe) doit être enfoncée.
Mod4 ou M4 : si la touche Méta 4 (si elle existe) doit être enfoncée.
Mod5 ou M5 : si la touche Méta 5 (si elle existe) doit être enfoncée.
Quadruple : si le détail doit se produire 4 fois rapidement.
Shift : si la touche majuscule (Maj) doit être enfoncée.
Triple : si le détail doit se produire 3 fois rapidement.
On peut associer plusieurs modificateur à un type en :
- les séparant par une virgule, dans se cas il suffit que l'un des modificateur soit actif pour que le gestionnaire d'événements valide l'action (exemple avec ctrl,atl il faut que la touche ctrl ou la touche alt soit enfoncée) ;
- les séparant par un trait d'union, dans se cas tous les modificateur doivent être actif pour que le gestionnaire d'événements valide l'action (exemple avec ctrl-atl il faut que la touche ctrl et la touche alt soient enfoncées).
Pour que les modificateurs double, triple et quadruple soient pris en compte, il faut que l'événement survienne 2,3 ou 4 fois dans un espace de temps réduit et sans autre apparition d’événement significatif comme un déplacement de la souris ou le relâchement d'une touche modificatrice.
Si aucun modificateur n'est précisez, l'événement sera valide quelque soit le ou les modificateurs actifs lors de l'apparition de l'événement.
LISTE DES TYPES D'EVENEMENTS STANDARDS.
Activate : le statut du contrôle passe à actif.
Se rapporte au changement de l'attribut state du controle. Par exemple un bouton grisé (inactif) devient cliquable (actif).
Button : abréviation de ButtonPress.
ButtonPress : l'un des boutons de la souris est enfoncé.
Si le contrôle doit répondre différemment selon le bouton enfoncé, la partie détail de l’événement précisera le bouton. Détails possibles :
- 1 : bouton 1 ("<ButtonPress-1>" ou la forme courte <"1">) ;
- 2 : bouton 2 ("<ButtonPress-2>" ou la forme courte <"2">) ;
- 3 : bouton 3 ("<ButtonPress-3>" ou la forme courte <"3">) ;
- 4 : bouton 4 ("<ButtonPress-4>" ou la forme courte <"4">) ;
- 5 : bouton 5 ("<ButtonPress-5>" ou la forme courte <"5">) ;
Il sera souvent préférable d'utiliser le type ButtonRelease.
ButtonRelease : L'un des boutons de la souris a été relâché.
Dans la plupart des cas, l'utilisation de ButtonRelease est meilleur que ButtonPress, car dans le cas où l’utilisateur appuie
accidentellement sur un des boutons de la souris, il aura toujours la possibilité de sortir le pointeur du controle avant de relâcher ce bouton, ce qui ne déclenchera pas d'appel involontaire de l'événement. Détails possibles :
- 1 : bouton 1 ("<ButtonRelease-1>") ;
- 2 : bouton 2 ("<ButtonRelease-2>") ;
- 3 : bouton 3 ("<ButtonRelease-3>") ;
- 4 : bouton 4 ("<ButtonRelease-4>") ;
- 5 : bouton 5 ("<ButtonRelease-5>").
Circulate : la fenêtre est déplacée de plan (avant-plan ou arrière-plan).
Cet événement se déclenche uniquement si le déplacement de plan est fait à la suite d'une demande de protocole XCirculateSubwindows. Notez que l'ordre d'empilement peut être modifié pour d'autres raisons qui ne génère pas un événement Circulate. Ce type d'événement n'est fournis que pour l'exhaustivité. Son utilisation est déconseillée (par tcl.kc lui-même) car il n'y a aucun moyen fiable de connaitre les positions et les modifications d'une fenêtre dans l'ordre de l'empilement.
Colormap : la palette de couleurs est modifiée.
Un événement Colormap se produit chaque fois que la palette de couleurs,, associée à une fenêtre est installée, modifiée ou désinstallée. Les contrôles peuvent être affectés par des palettes de couleurs qui leur sont propres en spécifiant l'option -colormap. tkinter ne fournit pas de détail pour cet événement.
Configure : la taille ou la position de la fenêtre, ou du controle, est modifiée.
Cet événement peut aussi être déclenchée si l'ordre d'emprisonnement est modifié.
Deactivate : le statut du controle passe à inactif.
Sa rapporte au changement de l'attribut state du controle. Par exemple un bouton cliquable (actif) devient grisé (inactif).
Destroy : l'objet est détruit.
Cet événement se produit si la fenêtre principale est détruite (fermeture du programme) suite à la fonction tkinter.destroy ( ). Il se produit aussi si un controle est détruit (le contrôle set dans un état " semi-mort", il existe toujours mais la plupart des opérations sur ce contrôle échoueront).
Enter : le pointeur entre dans le controle.
Expose : la fenêtre doit être redessinée.
Ceci peut se produire après la fenêtre ait été ouverte par une autre. Normalement, cet événement ne doit pas être de solliciter, en effet tkinter le gère en interne et automatiquement.
FocusIn : les saisies clavier se feront dans ce controle (il obtient le focus).
Les événements FocusIn et FocusOut se produisent chaque fois que le focus du clavier change. Le focus clavier dirige les saisies faites au clavier vers le contrôle par défaut au moment de la frappe.
FocusOut : les saisies clavier ne se feront plus dans ce contrôle (il perd le focus).
Les événements FocusIn et FocusOut se produisent chaque fois que le focus du clavier change. Le focus clavier dirige les saisies faites au clavier vers le contrôle par défaut au moment de la frappe.
Key : abréviation de KeyPress.
KeyPress : une touche du clavier est enfoncée.
Si le controle doit répondre différemment selon la touche enfoncée, la partie detail de l’événement précisera la touche, par exemple : "<KeyPress-b>" si la touche b doit être enfoncée. Pour les noms des touches spéciales voir la liste ci-après. Vous pouvez aussi utiliser des formes dites "courtes" pour ce type d'événement. Pour la forme courte, utilisé simplement le caractère, ou le nom de la touche, par exemple "<v>" pour "<KeyPress-v>" si la touche v doit être enfoncée. Il sera souvent préférable d'utiliser le type KeyRelease.
KeyRelease : une touche est relachée.
Si le controle doit répondre différemment selon la touche relachée, la partie detail de l’événement précisera la touche, par exemple : "<KeyRelease-b>" si la touche b doit être relachée. Pour les noms des touches spéciales voir la liste ci-après.
Leave : le pointeur sort du controle.
Map : un controle est devenu visible ("mappé", associé) dans la fenêtre.
Cet événement survient après la création d'un nouveau controle, après qu'il soit associée à la fenêtre par une méthode de positionnement : .pack ( ), .grid ( ) ou .place ( ), ou bien après qu'il soit rendu visible de nouveau. Cet événement est appelé chaque fois que la fenêtre a une nouvelle cartographie par une modification de la taille et/ou de la place d'un des controles qu'elle contient.
Motion : la souris est en mouvement (le pointeur se déplace à l'écran).
MouseWheel : la molette de la souris est tournée.
Utilisée le detail de ce type d'événement pour savoir dans quel sens, vers le haut ou vers le bas, l'utilisateur tourne la molette. La valeur du detail indique la sensibilité minimum pour le déclenchement de l'événement. Cette valeur dépends du système et de sa configuration par exemple : pour Windows cette valeur est au moins de 120. Détails possibles :
- nombre négatif : défilement de la molette vers le bas, par exemple : "<MouseWhell--120>" ;
- nombre positif : défilement de la molette vers le haut, par exemple : "<MouseWhell-120>".
Unmap : un controle est devenu invisible ou est dissocié de la fenêtre.
Cet événement survient après la perte d'un controle, après qu'il soit dissocié de la fenêtre par une méthode tel que .grid_remove ( ) ou bien après qu'il soit rendu invisible de nouveau. Cet événement est appelé chaque fois que la fenêtre a une nouvelle cartographie par une modification de la taille et/ou de la place d'un des controles qu'elle contient.
Visibility : une partie de la fenêtre est redevenu visible.
Une fenêtre est dite obscurcie si elle est recouverte, tout ou partie, par une autre fenêtre. Dès qu'une portion de cette fenêtre est à nouveau déobscucie, l'événement Visibility est générée. Utiliser le detail de ce type d'événement pour préciser la quantité de visibilité supplémentaire si besoin, par exemple : "<Visibility-10>".
Les événements non utilisés CirculateRequest, ConfigureRequest , Create, Gravity, MapRequest, Property, Reparent et ResizeRequest ne sont fournis que pour rendre possible les écritures de gestionnaire de fenêtres de type X 11. Le noyau tkinter ne peut utiliser ce gestionnaire, ils ne sont livrés que pour l'exhaustivité.
LISTE DES TYPES D'EVENEMENTS DU MODULE D'EXTENTION TKINTER.TTK.
Le module d'extension propose des événements complémentaires attachés aux nouvelles classes qu'il importe. Ces événements ne sont pas disponible pour les controles standards.
Classe tkinter.ttk.Combobox ( ) : liste des déroulante à choix.
"<<ComboboxSelected>>" : l'utilisateur a sélectionné une valeur dans la liste.
Classe tkinter.ttk.Notebook ( ) : conteneur à onglets.
"<<NotebookTabChanged>>" : un onglet est sélectionné.
Classe tkinter.ttk.PanedWiindow ( ) : bandeau de controles.
"<<EnteredChild>>" : un controle du bandeau est sélectionné.
Classe tkinter.ttk.Spinbox ( ) : boite à choix révisée.
"<<Increment>>" : l'utilisateur a cliquer sur la flèche vers le haut.
"<<Decrement>>" : l'utilisateur a cliquer sur la flèche vers le bas.
Classe tkinter.ttk.Style ( ) : thèmes et styles de formatage.
"<<ThemeChanged>>" : un nouveau thème actif est appliqué à l'interface graphique.
Classe tkinter.ttk.Treeview ( ) : arborescences et tableaux.
"<<TreeviewClose>>" : la descendance de l'élément vient d'être cachée.
"<<TreeviewOpen>>" : la descendance de l'élément vient d'être affichée.
"<<TreeviewSelect>>" : la sélection à été modifiée.
NOMS DES TOUCHES SPÉCIALES.
Chaque touche d'un clavier possède un nom qui lui est propre, et qui l'identifie de façon unique (keysys). Cela est rendu nécessaire du fait que, selon les régions du monde, les alphabets et/ou les graphèmes sont différents. Lors du nommage du detail, vous n'êtes pas obligé d'utiliser ce nom, mais juste la lettre ou le symbole représenté sur la touche. Par exemple, pour la touche < (inférieur à), on peut utiliser "<KeyPress-<>", ou la forme courte "<<>", au lieu de "<KeyPress-Less>", Less étant le nom de la touche <.
Cependant certaines touches ne produisent aucun graphème, tel que les touches Alt, Ctrl, Return, et d'autres touches produisent un graphème disponible sur les touches standards, tel que les chiffres du pavé numérique. Il est donc indispensable, dans ces cas, d'utiliser le nom de la touche pour identifier le detail (touche du clavier) souhaité. La liste suivante présente le nom des principales touches d'édition d'un clavier standard.
Alt_L : touche Alt à gauche du clavier.
Alt_R : touche Alt à droite du clavier.
BackSpace : touche retour arrière (backspace).
Cancel : touche annulation (sur certains systèmes uniquement).
Caps_Lock : touche verrouillage du clavier en majuscules.
Control_L : touche Ctrl à gauche du clavier.
Control_R touche Ctrl à droite du clavier.
Delete : touche supprimer (Supr.).
Down : touche flèche vers le bas
End : touche fin (end).
Escape : touche d'échappement (Ech).
Execute : touche éxecuter (sur certains systèmes uniquement).
F1, F2, ..., F12 : touches fonctions.
Home : touche début (home).
KP_0, KP_1, ..., KP_9 : touches chiffres du pavé numérique.
KP_Add : touche plus (+) du pavé numérique.
KP_Begin : touche centrale du pavé numérique (5).
KP_Decimal : touche du symbole décimal du pavé numérique (. ou ,).
KP_Divise : touche division (/) du pavé numérique.
KP_Down : touche flèche vers le bas du pavé numérique.
KP_End : touche fin (end) du pavé numérique.
KP_Enter : touche entrée (return) du pavé numérique.
KP_Home : touche début (home) du pavé numérique.
KP_Insert : touche Insertion (Inser ) du pavé numérique.
KP_Left : touche flèche retour (à gauche) du pavé numérique.
KP_Multiply : touche multiplier (*) du pavé numérique.
KP_Next : touche page suivante du pavé numérique.
KP_Prior : touche page précédente du pavé numérique.
KP_Rignt : touche flèche avance (à droite) du pavé numérique.
KP_Subtract : touche moins (-) du pavé numérique.
KP_Up : touche flèche vers le haut du pavé numérique.
Left : touche Flèche recule (vers la gauche).
Next : touche Page suivante.
Num_Lock : touche verrouillage du pavé numérique.
Pause : touche pause (Pause / Attn).
Print_Impr. : touche capture d'écran (écran / Syst).
Prior : touche page précédente.
Return : touche entrée (return).
Right : touche flèche avance (vers la droite).
Scroll_Lock : touche verrouillage défilement.
Shift_L : touche majuscule (Maj) à gauche du clavier.
Shift_R : touche majuscule (Maj) à droite du clavier.
space : touche barre d'espace (space).
Tab : touche tabulation (Tab).
Up : touche flèche vers le haut.
EXEMPLE.
import tkinter
def FNC_Lecture ( event ) :
ktexte = "Données ... \n"
ktexte += "char :" + str ( event.char ) + "\n"
ktexte += "delta :" + str ( event.delta ) + "\n"
ktexte += "height :" + str ( event.height ) + "\n"
ktexte += "keycode :" + str ( event.keycode ) + "\n"
ktexte += "keysym :" + str ( event.keysym ) + "\n"
ktexte += "keysym_num :" + str ( event.keysym_num ) + "\n"
ktexte += "num :" + str ( event.num ) + "\n"
ktexte += "serial :" + str ( event.serial ) + "\n"
ktexte += "state :" + str ( event.state ) + "\n"
ktexte += "time :" + str ( event.time ) + "\n"
ktexte += "widget :" + str ( event.widget ) + "\n"
ktexte += "width. :" + str ( event.width ) + "\n"
ktexte += "x :" + str ( event.x ) + "\n"
ktexte += "y :" + str ( event.y ) + "\n"
ktexte += "x_root :" + str ( event.x_root ) + "\n"
ktexte += "y_root :" + str ( event.y_root ) + "\n"
LAB_Donnees [ "text" ] = ktexte
TKI_Principal = tkinter.Tk ( )
BUT_Quitter = tkinter.Button ( TKI_Principal , text = "Quitter" , command = TKI_Principal.destroy )
BUT_Message = tkinter.Button ( TKI_Principal , text = "Afficher les paramètres" )
LAB_Message = tkinter.Label ( TKI_Principal , text = "Appuyez sur une touche\n ou cliquez sur le bouton." )
LAB_Donnees = tkinter.Label ( TKI_Principal , justify = "left" , anchor = "w" )
TKI_Principal.bind ( "<KeyPress>" , FNC_Lecture )
BUT_Message.bind ( "<ButtonPress>" , FNC_Lecture )
LAB_Message.grid ( row = 0 , column = 0 )
LAB_Donnees.grid ( row = 0 , column = 1 , rowspan = 3 )
BUT_Message.grid ( row = 1 , column = 0 )
BUT_Quitter.grid ( row = 2 , column = 0 )
TKI_Principal.mainloop ( )
Votre aide est précieuse pour améliorer ce site, alors n'hésitez pas à faire part de