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.

gérer le clic gauche sur un élément graphique (tkinter)

+2 votes

Je ne sais pas comment m'y prendre pour répondre à cette question :

"associez au clic du bouton de gauche (tag_bind) sur un carré l’affichage dans le label de la couleur dans un format lisible par l’utilisateur,"

Sachant que j'ai une fenêtre affichant plein de carrés de couleur unique chacun (en récupérant les couleurs sur un fichier spécifique).
La partie qui nous intérésse est, je pense, la partie traitant du Canvas (désolé pour le parasitage avec le reste du code).

from tkinter import*
from traitment_color import *

# initialisation

dico = dic_file()
l = l_dic(dico)
insertionSort(l)

root = Tk()

# Création du canvas
zone_dessin = Canvas(root, width=600, height=400)
zone_dessin.pack()
dico = dic_file() # dico des couleurs de rgb.txt
x,y,w,z = 100,100,200,200
for i in l:
    try:
        zone_dessin.create_rectangle(x,y,w,z,fill=i)
        y,z = y+100,z +200
        zone_dessin.itemconfig(item, tags=("tagc",i))
        # On attribue un tag commun "tagc" et un tag particulier contenant le nom de la couleur
        #zone_dessin.bind('<Button-1>',afficher_couleur) est-ce un truc du genre qu'il faut utiliser avec la fct° qui va bien? 
    except:
        pass
# Création label
lab = Label(root, text="je sais dire autre chose que hello world! ", fg='black', bg='white')
lab.pack()

# Création de la Frame
myframe = Frame(root)
for mesg in ("Ok","Annuler"):
    Button(text=mesg).pack()
myframe.pack()

# Creation de la scrollbar

scl = Scrollbar(root, command = zone_dessin.yview)
scl.pack(side=LEFT, fill=Y)
zone_dessin.config(yscrollcommand=scl.set)

root.mainloop()

Je me doute bien que je vais devoir utiliser les tags(contenant donc la couleur unique de chaque rectangle) pour ensuite l'afficher, mais cela est bien trop flou pour moi, un truc dans la sauce :

tuple_de_handles = ton_canvas.find_withtag("nom1")
demandé 2-Fev-2015 par boblinux (3,092 points)
edité 2-Fev-2015 par max

2 Réponses

+1 vote
 
Meilleure réponse

Bon, problème résolu j'file mon code au cas où un petit internaute boutonneux serait intéressé (ya quand même un mini d'abstraction, je pense pas qu'il soit pédagogique de filer la lib qui va avec, hein sam =D )

from tkinter import*
from traitment_color import *
from my_lib_tk import*

root = Tk()

txtvar = StringVar()

# Création du canvas
zone_dessin = my_canvas(root)
zone_dessin.pack()

# dessin des carre sur le canvas
dessiner_carre(zone_dessin)

# test bind
def callback(event):
        items=zone_dessin.find_withtag("current")
        tag=zone_dessin.gettags(items)
        txtvar.set(tag[1])

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

# Création label
lab=my_lab(root,txtvar)
lab.pack()

# Création de la Frame
myframe = Frame(root)
my_button() # création des boutons 'ok' et 'annuler'
myframe.pack()

# Creation de la scrollbar
my_scroll(root, zone_dessin)

root.mainloop()
répondu 9-Fev-2015 par boblinux
sélectionné 16-Mar-2015 par boblinux

Cool! Tu peux accepter ta réponse pour clore le sujet, merci.

+2 votes

Il te faut diviser le problème en 4 sous problèmes, et les résoudre un par un.

Le premier, c'est de lancer une fonction (c'est ce qu'on appelle un callback) quand l'utilisateur clique sur ton canvas. Tu peux le faire avec la méthode bind().

Le second est dans cette fonction, récupérer l'objet event représentant le clic, et l'utiliser avec la méthode find_closest() pour trouver l'élement graphique le plus proche.

Le troisième et de récupérer le tag de cet élément.

Le quatrième est d'afficher du texte dans cet élément graphique.

Avec tous ces éléments, tu peux résoudre ton exercice. T'aider plus annulerait l’intérêt du devoir et je pense que ton prof n'apprécierait pas trop :)

répondu 5-Fev-2015 par Sam (4,978 points)
...