⇨ MENU ⇨ MODULES ⇨ tkinter ⇨ controles standards ⇨ Canvas
tkinter.Canvas ( ).tag_bind ( )
⇨ MENU ⇨ MODULES ⇨ tkinter ⇨ controles standards ⇨ Canvas
tkinter.Canvas ( ).tag_bind ( )
DESCRIPTION.
Lie un gestionnaire d'événement aux éléments associés à un tag dans d'une zone de dessin.
SYNTAXE.
CAN_Toile.tag_bind ( tag , evenement , fonction , ajout )
CAN_Toile ⇨ instance quelconque de tkinter.Canvas ( ) [ OBLIGATOIRE ]
.tag_bind ( ) ⇨ appel de la méthode [ OBLIGATOIRE ]
tag ⇨ groupe d'éléments lié à l'événement [ OBLIGATOIRE ]
evenement ⇨ événement à surveiller [ OBLIGATOIRE ]
fonction ⇨ fonction à exécuter [ OBLIGATOIRE ]
ajout ⇨ indique si le tag reçoit plusieurs événements [ optionnel ]
REMARQUES.
tag est un str ( ) quelconque qui représente l'élément ou le groupe d'éléments qui seront sensible à evenement. Tous les éléments peuvent recevoir un ou plusieurs tags. Les éléments possédant un tag commun, forment un groupe d'éléments, et ils pourront donc être appelés ensemble.
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 groupe d'éléments. Voir le gestionnaire d'événements 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 la classe tkinter.Events ( ) pour plus d'informations.
L'attribut ajout doit être 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.
Voir aussi : les événements dans tkinter et la classe tkinter.Events ( ) pour des informations détaillées sur la gestion des événements dans tkinter.
EXEMPLE.
import tkinter
def FNC_Dessus ( ) :
LAB_Avant [ "text" ] = f"Ordre des éléments avant modifications\n{ CAN_Test.find_all ( ) }"
if BUT_Dessus [ "text" ] == "Mettre les VERTS au premier plan" :
BUT_Dessus [ "text" ] = "Mettre les ROSE au premier plan"
CAN_Test.tag_raise ( "vert" )
CAN_Test.tag_lower ( "rose" )
else :
BUT_Dessus [ "text" ] = "Mettre les VERTS au premier plan"
CAN_Test.tag_raise ( "rose" )
CAN_Test.tag_lower ( "vert" )
LAB_Apres [ "text" ] = f"Ordre des éléments après modifications\n{ CAN_Test.find_all ( ) }"
def FNC_Lier ( Q ) :
if Q == "carre" :
if BUT_Carres [ "text" ] == "Désactiver les carrés" :
BUT_Carres [ "text" ] = "Activer les carrés"
CAN_Test.tag_unbind ( "carre" , "<Enter>" )
else :
BUT_Carres [ "text" ] = "Désactiver les carrés"
CAN_Test.tag_bind ( "carre" , "<Enter>" , lambda event : FNC_Type ( "carre" ) )
else :
if BUT_Ronds [ "text" ] == "Désactiver les ronds" :
BUT_Ronds [ "text" ] = "Activer les ronds"
CAN_Test.tag_unbind ( "rond" , "<Enter>" )
else :
BUT_Ronds [ "text" ] = "Désactiver les ronds"
CAN_Test.tag_bind ( "rond" , "<Enter>" , lambda event : FNC_Type ( "rond" ) )
def FNC_Type ( Q ) :
if Q == "sortie" :
CAN_Test.itemconfig ( "texte" , text = "" )
CAN_Test.update ( )
else :
kelement = CAN_Test.find_withtag ( "current" ) [ 0 ]
ktexte = f"Sur un { Q }\nId de l'élément { kelement }"
CAN_Test.itemconfig ( "texte" , text = ktexte )
TKI_Principal = tkinter.Tk ( )
BUT_Quitter = tkinter.Button ( TKI_Principal , text = "Quitter" , command = TKI_Principal.destroy )
BUT_Carres = tkinter.Button ( TKI_Principal , text = "Désactiver les carrés" , command = lambda : FNC_Lier ( "carre" ) )
BUT_Ronds = tkinter.Button ( TKI_Principal , text = "Désactiver les ronds" , command = lambda : FNC_Lier ( "rond" ) )
BUT_Dessus = tkinter.Button ( TKI_Principal , text = "Mettre les VERTS au premier plan" , command = FNC_Dessus )
LAB_Avant = tkinter.Label ( TKI_Principal , relief = "groove" , bd = 3 , height = 2 )
LAB_Apres = tkinter.Label ( TKI_Principal , relief = "ridge" , bd = 3 , height = 2 )
CAN_Test = tkinter.Canvas ( TKI_Principal , bg = "wheat" , width = 300 , height = 300 )
CAN_Test.create_oval ( 200 , 25 , 275 , 100 , fill = "hotpink" , tags = ( "rond" , "rose" ) )
CAN_Test.create_oval ( 25 , 200 , 100 , 275 , fill = "palegreen" , tags = ( "rond" , "vert" ) )
CAN_Test.create_rectangle ( 50 , 50 , 250 , 250 , fill = "sienna" , width = 5 )
CAN_Test.create_rectangle ( 25 , 25 , 100 , 100 , fill = "pink" , tags = ( "carre" , "rose" ) )
CAN_Test.create_rectangle ( 200 , 200 , 275 , 275 , fill = "limegreen" , tags = ( "carre" , "vert" ) )
CAN_Test.create_line ( 30 , 30 , 95 , 95 , fill = "lime" , width = 5 , tags = ( "ligne" , "vert" ) )
CAN_Test.create_line ( 205 , 205 , 270 , 270 , fill = "fuchsia" , width = 5 , tags = ( "ligne" , "rose" ) )
CAN_Test.create_text ( 150 , 150 , fill = "yellow" , font = ( None , 14 ) , justify = "center" , tags = ( "texte" ) )
CAN_Test.tag_bind ( "carre" , "<Enter>" , lambda event : FNC_Type ( "carre" ) )
CAN_Test.tag_bind ( "rond" , "<Enter>" , lambda event : FNC_Type ( "rond" ) )
CAN_Test.tag_bind ( "ligne" , "<Enter>" , lambda event : FNC_Type ( "trait" ) )
CAN_Test.tag_bind ( "all" , "<Leave>" , lambda event : FNC_Type ( "sortie" ) )
CAN_Test.pack ( )
BUT_Carres.pack ( fill = "both" )
BUT_Ronds.pack ( fill = "both" )
BUT_Dessus.pack ( fill = "both" )
LAB_Avant.pack ( fill = "both" )
LAB_Apres.pack ( fill = "both" )
BUT_Quitter.pack ( fill = "both" )
TKI_Principal.mainloop ( )
Votre aide est précieuse pour améliorer ce site, alors n'hésitez pas à faire part de