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.

Comment afficher des carrés à l’écran de la couleur de chaque entrée d'un fichier rgb.txt, avec tkinter ?

+1 vote

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

"affichez des carrés à l’écran de la couleur de chaque entrée du fichier rgb.txt, en utilisant ce que vous avez fait précédemment ; afin de préparer la suite du TP chaque carré doit comporter deux "tags" : l’un (commun à tous les carrés) permettant de l’associer à une action de l’utilisateur, l’autre correspondant au nom de la couleur"

A savoir que je sais afficher des carrés, je sais lire un fichier et récupérer le nom des couleurs, mais je ne comprends pas la partie qui parle de "tag". Voici mon bout de code pour l'instant qui ne fait pas grand chose à part afficher des carrés sur un canvas =D diagonalement :

from tkinter import *

root = Tk()

# Création du canvas
zone_dessin = Canvas(root, width=600, height=400)
zone_dessin.pack()

x,y,w,z = 100,100,200,200
i=0
while i<50:
        zone_dessin.create_rectangle(x,y,w,z)
        x,y,w,z=x+10,y+10,w+10,z+10
        i=i+1

# Création label
lab = Label(root, text="pourquoi toujours 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()

root.mainloop()
demandé 1-Fev-2015 par boblinux (3,092 points)
reclassée 3-Fev-2015 par max

Il y a des boutons au dessus de l'éditeur pour le formatage. Pas besoin de mettre

.

1 Réponse

+1 vote
 
Meilleure réponse

Il y a plusieurs manières de manipuler des éléments dans un canvas tkinter.

Une des manières est d'utiliser le "handle", un numéro sous forme d'int qui est retourné à la création de ton élément. Par exemple, si je fais :

ligne = ton_canvas.create_line(0, 0, 100, 100)

La variable "ligne" va contenir un entier.

Avec cet entier, tu peux faire toutes les manipulations sur son éléments (ici notre ligne). Par exemple, si tu veux récupérer plus tards les coordonnées de ta ligne :

coordonnees = ton_canvas.coords(ligne)

Tu note qu'on lui passe le "handle" pour dire "file moi les coordonnées de cette ligne en particulier".

Les tags (ça veut dire "étiquettes", en français) sont des noms qu'on peut donner à un élément que tu as dessiné sur ton canvas : tu peux tagger une ligne, un carré, un triangle, un cercle... Ca fait pareil que le handle, sauf que c'est une string, que c'est toi qui l'a choisit, et que tu peux en mettre plusieurs sur un élément. Tu peux aussi, mettre le même tag sur des éléments différents.

Dans ton cas, ton prof veut que chaque carré soit associé à deux tags, l'un avec une action de l'utilisateur (je sais pas quelle action), et l'autre avec la couleur du carré.

Le but est que tu peux récupérer ces éléments plus tard en utilsant ce tag pour le retrouver facilement.

Exemple avec une ligne :

# je dessine une ligne 
ligne = ton_canvas.create_line(0, 0, 100, 100)
# je lui ajoute des étiquettes
ton_canvas.itemconfig(item, tags=("nom1", "nom2"))

Plus tard, dans ton code, tu peux récupérer tes éléments en connaissant seulement leurs tags :

tuple_de_handles = ton_canvas.find_withtag("nom1")

Ton prof te demande donc de faire ça de telle sorte que tu puisse, plus tard, dire "donne moi les handles de tous les carrés jaunes".

répondu 1-Fev-2015 par Sam (4,974 points)
sélectionné 2-Fev-2015 par boblinux

Qu'entends-tu par element_tkinter ? Puis-je faire par exemple :

zone_dessin.create_rectangle(x,y,w,z).addtag_withtag("tag1", "tag2")?

D'ailleurs je n'arrive pas à comprendre l'utilité des tags, un mini-exemple serait le bienvenue pour comprendre l'utilité de ce concept, cela sert-il à retrouver un certain nombre d'éléments avec un "point commun" (qui sera le tag commun ici) pour ensuite faire un traitement spécifique pour ces éléments là en particulier (partageant le même tag) ?
Enfin, que retourne exactement find_withtag("tag") ? des string avec la référence des éléments du canvas visés?

Ps : J'pose beaucoup de questions =D, c'est que j'aime comprendre les choses en profondeur et surtout maîtrisé les concepts pour pouvoir ensuite faire abstraction de l'outil

C'est le but du site. J'ai updaté la réponse.

...