⇨ MENU ⇨ MODULES ⇨ tkinter ⇨ liste des méthodes
tkinter.bind ( )
⇨ MENU ⇨ MODULES ⇨ tkinter ⇨ liste des méthodes
tkinter.bind ( )
DESCRIPTION.
Lie un événement (clavier, souris, ...) à un controle pour qu'il réagisse à cet événement.
SYNTAXE.
widget.bind ( evenement , fonction , ajout )
widget ⇨ controle devant être lié [ OBLIGATOIRE ]
.bind ( ) ⇨ appel de la méthode [ OBLIGATOIRE ]
evenement ⇨ événement à surveiller [ OBLIGATOIRE ]
fonction ⇨ fonction à exécuter [ OBLIGATOIRE ]
ajout ⇨ indique si le controle reçoit plusieurs événements [ optionnel ]
REMARQUES.
evenement doit être écrit en suivant une syntaxe, stricte, précise et invariable selon le type d’événement, que l'on souhaite associer au controle. Voir le gestionnaire d'événements des controles pour plus de détails sur cette syntaxe.
fonction doit être une fonction, quelconque mais valide. Le nom de la fonction appelée, ne doit pas être suivie des parenthèses car aucun argument ne peut être passé lors de l'appel de la fonction. Attention cependant, car tkinter fournit, automatiquement, un objet tkinter.Event ( ) comme argument à la fonction à exécuter, qui devra donc le prévoir dans sa définition. Toutefois, si des valeurs doivent être fournis pour le traitement correct de la fonction appelée, fonction pourra être une fonction anonyme créée avec l'instruction lambda. Voir classe tkinter.Events ( ) pour plus d'informations.
L'attribut ajout doit être nommé par add = "+" pour préserver les anciennes liaisons. S'il est absent, le ou les liens créés précédemment sur ce controle sont détruits. Si add = "+" est présent, le controle peut alors être sollicité par plusieurs événements et y répondre, de façon identique, ou différentes, selon le script.
IMPORTANT. Lire attentivement "les événements dans tkinter" et la classe tkinter.Events ( ) pour des informations détaillées sur l'utilisation optimale des méthodes tkinter.bind ( ), tkinter.bind_class ( ) et tkinter.bind_all ( ).
EXEMPLE.
1. Utilisation standard de la méthode tkinter.bind ( ).
La méthode tkinter.bind ( ) ne permet pas de passer d'argument à la fonction appelée par l'apparition de l'événement. C'est pour cela qu'il ne faut pas mettre de couple de parenthèses avec le nom de la fonction. Mais la méthode tkinter.bind ( ) passe automatiquement un argument à la fonction. Cette argument est un objet de la classe tkinter.Event ( ) qui fourni des connaissances sur l'état et les circonstances de l'appel. La fonction appelée doit donc obligatoirement prévoir, dans son en-tête, de recevoir cet objet comme unique paramètre.
import tkinter
def FNC_ToucheA ( event ) :
LAB_Reponse [ "foreground" ] = "blue"
LAB_Reponse [ "background" ] = "cyan"
LAB_Reponse [ "text" ] = "La touche a relâchée."
def FNC_ToucheB ( event ) :
LAB_Reponse [ "foreground" ] = "red"
LAB_Reponse [ "background" ] = "yellow"
LAB_Reponse [ "text" ] = "Appui sur la touche b."
TKI_Principal = tkinter.Tk ( )
tkinter.Label ( TKI_Principal , text = "Appuyez sur la touche a" ).pack ( )
tkinter.Label ( TKI_Principal , text = "Appuyez sur la touche b" ).pack ( )
LAB_Reponse = tkinter.Label ( TKI_Principal , text = "En attente ..." )
LAB_Reponse.pack ( )
tkinter.Button ( TKI_Principal , text = "Quitter" , command = TKI_Principal.destroy ).pack ( )
TKI_Principal.bind ( "<KeyRelease-a>" , FNC_ToucheA )
TKI_Principal.bind ( "<KeyRelease-A>" , FNC_ToucheA )
TKI_Principal.bind ( "<KeyPress-b>" , FNC_ToucheB )
TKI_Principal.bind ( "<KeyPress-B>" , FNC_ToucheB )
TKI_Principal.mainloop ( )
2. Passer des argument à la fonction appelée avec la méthode tkinter.bind ( ).
Si la fonction appelée par l'apparition d'un événement surveillé par une méthode tkinter.bind ( ), nécessite des arguments pour son fonctionnement, il faut alors utiliser une fonction anonyme lambda. Cette fonction anonyme lambda recevra l'objet généré par la classe tkinter.Event ( ), puis elle appellera la fonction souhaitée, en lui passant les arguments que le programme prévoit de traiter à l'aide de cette méthode. L'objet de la classe tkinter.Event ( ), pourra faire parti, ou non, de ces arguments.
import tkinter
def FNC_Touche ( Qtouche , Qencre , Qfond ) :
LAB_Reponse [ "foreground" ] = Qencre
LAB_Reponse [ "background" ] = Qfond
kaction = "relachée" if Qtouche.upper ( ) == "A" else "enfoncée"
LAB_Reponse [ "text" ] = f"La touche { Qtouche } est { kaction }."
TKI_Principal = tkinter.Tk ( )
tkinter.Label ( TKI_Principal , text = "Appuyez sur la touche a" ).pack ( )
tkinter.Label ( TKI_Principal , text = "Appuyez sur la touche b" ).pack ( )
LAB_Reponse = tkinter.Label ( TKI_Principal , text = "En attente ..." )
LAB_Reponse.pack ( )
tkinter.Button ( TKI_Principal , text = "Quitter" , command = TKI_Principal.destroy ).pack ( )
TKI_Principal.bind ( "<KeyRelease-a>" , lambda event : FNC_Touche ( "a" , "blue" , "cyan" ) )
TKI_Principal.bind ( "<KeyRelease-A>" , lambda event : FNC_Touche ( "A" , "blue" , "cyan" ) )
TKI_Principal.bind ( "<KeyPress-b>" , lambda event : FNC_Touche ( "b" , "red" , "yellow" ) )
TKI_Principal.bind ( "<KeyPress-B>" , lambda event : FNC_Touche ( "B" , "red" , "yellow" ) )
LAB_Reponse.pack ( )
TKI_Principal.mainloop ( )
Votre aide est précieuse pour améliorer ce site, alors n'hésitez pas à faire part de