Bienvenue sur IndexError.

Ici vous pouvez poser des questions sur Python et le Framework Django.

Mais aussi sur les technos front comme React, Angular, Typescript et Javascript en général.

Consultez la FAQ pour améliorer vos chances d'avoir des réponses à vos questions.

récuperer les coordonnées d'un objet graphique à partir du tag

+1 vote

Cette fonction crée des ronds, chaque rond a un tag unique (cpt), et deux tags communs.

def create_noeuds1():
    """ Crée un quadrillage de noeuds en fonction de sa dimension ligne/colonne """
    h = main.hauteur_entry.get()
    l = main.largeur_entry.get()
    i, j = 0, 0 
    x0,y0,x1,y1 = 30, 30 , 50 ,50
    # création du quadrillage de dimension ligne, colonne 
    cpt = 0 
    while i < int(l)-1 :
        while j < int(h)-1 :
            main.my_canvas.create_oval(x0,y0,x1,y1, fill = 'black', tag=("mur",cpt))
            x0 ,x1 = x0 + 60 , x1 + 60
            j = j + 1
            cpt = cpt + 1
        j = 0
        i = i + 1
        y0, y1 = y0 + 60, y1 + 60
        x0, x1 = 30, 50

Ce qui me permet de récuperer le tag de chaque objet graphique en cliquant dessus c'est :

def callback(event):
    items = main.my_canvas.find_withtag("current")
    tag = main.my_canvas.gettags(items)
    main.txtvar = tag
    coord = main.my_canvas.coords(tag)
    print(main.txtvar)

appelée grâce à :

my_canvas.bind('<Button-1>',ui.callback)

en cliquant sur mes objets graphiques, j'obtiens un affichage comme suit :

('mur', '0', 'current')
('mur', '1', 'current')
('mur', '2', 'current')

Donc j'obtiens bien un tag unique pour chaque objet graphique, maintenant j'aimerai une fonction (si elle existe) qui me permette de récuper les coordonnées de chaque objet graphique en fonction des tags, un truc du genre : mycanvas.recupcoordwithtag(tag)

voilou, j'espere avoir été clair, et merci de me prêter un peu de votre temps pour résoudre mon pb.
kiss =D

demandé 16-Mar-2015 par boblinux (3,092 points)

1 Réponse

+2 votes
 
Meilleure réponse

Ok voilà la réponse :

def callback(event):
        """ Associe au clic de souris l'affichage des tags de l'objet graphique cliqué """
        # On récupere les tags de l'obj graphique dans tag
        items = main.my_canvas.find_withtag("current")
        tag = main.my_canvas.gettags(items)
        main.txtvar = tag
        print("tag obj graphique : ",main.txtvar)
        # On récupere les coordonnées du clic souris
        souris = main.my_canvas.find_closest(event.x, event.y)
        # On récupere les coordonnées de l'objet graphique le plus proche du clic souris
        print("coord clic : ", event.x, event.y, " ; coord obj graph visé : ",main.my_canvas.coords(souris[0]))

à l'execution, en cliquant sur les objets graphiques, on obtient :

tag obj graphique :  ('cadre', '0', 'current')
coord clic :  11 14  ; coord obj graph visé :  [0.0, 0.0, 20.0, 20.0]
tag obj graphique :  ('cadre', '1', 'current')
coord clic :  68 10  ; coord obj graph visé :  [60.0, 0.0, 80.0, 20.0]
tag obj graphique :  ('mur', '0', 'current')
coord clic :  40 41  ; coord obj graph visé :  [30.0, 30.0, 50.0, 50.0]
tag obj graphique :  ('cadre', '6', 'current')
coord clic :  71 68  ; coord obj graph visé :  [60.0, 60.0, 80.0, 80.0]
tag obj graphique :  ('mur', '5', 'current')
coord clic :  98 95  ; coord obj graph visé :  [90.0, 90.0, 110.0, 110.0]

etc...

Kiss

répondu 18-Mar-2015 par boblinux (3,092 points)
sélectionné 18-Mar-2015 par boblinux
...