⇨ MENU ⇨ MODULES ⇨ tkinter ⇨ controles standards ⇨ Canvas
tkinter.Canvas ( ).find_overlapping ( )
⇨ MENU ⇨ MODULES ⇨ tkinter ⇨ controles standards ⇨ Canvas
tkinter.Canvas ( ).find_overlapping ( )
DESCRIPTION.
Retourne, dans un tuple ( ), les identifiants de tous les éléments ayant au moins un pixel dans une région donnée.
SYNTAXE.
TPL_Elements = CAN_Toile.find_overlapping ( *region )
TPL_Elements = ⇨ variable qui recevra la valeur [ optionnel ]
CAN_Toile ⇨ instance quelconque de tkinter.Canvas ( ) [ OBLIGATOIRE ]
.find_overlapping ( ) ⇨ appel de la méthode [ OBLIGATOIRE ]
*region ⇨ coordonnées des sommets de la région de référence [ OBLIGATOIRE ]
REMARQUES.
*region est un tuple ( ), ou une list ( ), contenant obligatoirement 4 éléments. Tous ces éléments sont des int ( ) ou float ( ), exprimés en pixels et caractérisant les sommets de la région devant entièrement contenir les éléments visés, où :
- le premier élément désigne le bord gauche de la région, soit l'abscisse minimal ;
- le deuxième élément désigne le bord haut de la région, soit l'ordonnée minimal ;
- le troisième élément désigne le bord droit de la région, soit l'abscisse maximal ;
- le quatrième élément désigne le bord bas de la région, soit l'ordonnée maximal.
Bien que tout à fait légale, la forme CAN_Toile.find_overlapping ( abscisse1 , ordonnee1 , abscisse2 , ordonnee2 ) devra être évitée le plus souvent possible.
EXEMPLE.
import tkinter
def FNC_Cible ( ) :
kabscisse = TKI_Principal.winfo_pointerx ( ) - CAN_Toile.winfo_rootx ( )
kordonnee = TKI_Principal.winfo_pointery ( ) - CAN_Toile.winfo_rooty ( )
kregion = ( kabscisse - 20 , kordonnee - 20 , kabscisse + 20 , kordonnee + 20 )
CAN_Toile.coords ( CAN_Region , kregion )
kelements = CAN_Toile.find_overlapping ( *kregion )
kmessage = f"aux Id. { kelements [ 1 : ] } qui sont présents\n"
kmessage += f"dans la région de centre { kabscisse } : { kordonnee }"
LAB_Cible [ "text" ] = kmessage
TKI_Principal.after ( 100 , FNC_Cible )
def FNC_Selection ( event ) :
kabscisse = TKI_Principal.winfo_pointerx ( ) - CAN_Toile.winfo_rootx ( )
kordonnee = TKI_Principal.winfo_pointery ( ) - CAN_Toile.winfo_rooty ( )
kregion = ( kabscisse - 20 , kordonnee - 20 , kabscisse + 20 , kordonnee + 20 )
krang = LAB_Instruction [ "text" ].split ( ) [ -1 ]
ktag = "&" + krang
CAN_Toile.addtag_overlapping ( ktag , *kregion )
kelements = CAN_Toile.find_withtag ( ktag )
kmessage = ""
for kelement in kelements [ 1 : ] :
kmessage += f"Maintenant les tags de l'élément Id. { kelement }\n"
kmessage += f"sont : { CAN_Toile.itemcget ( kelement , 'tags' ) }\n\n"
LAB_Message [ "text" ] = kmessage
LAB_Instruction [ "text" ] = f"Cliquez pour ajouter { int ( krang ) + 1 }"
TKI_Principal = tkinter.Tk ( )
BUT_Quitter = tkinter.Button ( TKI_Principal , text = "Quitter" , command = TKI_Principal.destroy )
LAB_Instruction = tkinter.Label ( TKI_Principal , text = "Cliquez pour ajouter 1" )
LAB_Cible = tkinter.Label ( TKI_Principal )
LAB_Message = tkinter.Label ( TKI_Principal , justify = "left" , anchor = "w" , height = 14 )
CAN_Toile = tkinter.Canvas ( TKI_Principal , bg = "palegreen" , width = 290 , height = 290 )
CAN_Region = CAN_Toile.create_rectangle ( 0 , 0 , 0 , 0 )
for kligne in range ( 10 , 270 , 40 ) :
for kcolonne in range ( 10 , 270 , 40 ) :
CAN_Toile.create_rectangle ( kcolonne , kligne , kcolonne + 30 , kligne + 30 , fill = "cornsilk" )
CAN_Toile.bind ( "<ButtonRelease-1>" , FNC_Selection )
LAB_Instruction.pack ( )
LAB_Cible.pack ( )
CAN_Toile.pack ( )
LAB_Message.pack ( fill = "both" )
BUT_Quitter.pack ( fill = "both" )
FNC_Cible ( )
TKI_Principal.mainloop ( )
Votre aide est précieuse pour améliorer ce site, alors n'hésitez pas à faire part de