IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Tkinter Python Discussion :

Savoir le nom d'un élément graphique qui est dans une boucle ?


Sujet :

Tkinter Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2018
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2018
    Messages : 26
    Par défaut Savoir le nom d'un élément graphique qui est dans une boucle ?
    J'ai fait un programme en Python avec Tkinter qui créer une fenêtre avec 36 carrés rouges dedans
    Les carrés sont créés dans une boucle, je souhaiterais modifier la couleur de chaque carré, je ne vois pas comment faire ...
    J'ai essayé avec la méthode .itemconfig mais il me manque le nom de l'élément graphique

    Voici mon programme (fait avec edupython):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    from tkinter import*
    fenetre=Tk()
    canvas=Canvas(fenetre,height=600,width=600) #taille de la fenêtre
    canvas.pack(side=LEFT)
     
     
    liste_carres=[]
    liste_couleur=[]
    couleur=['#1247ed','red','blue','green','pink','orange','#a7d5e1'] #liste de couleur
     
    def action(ev): #donne le numéro du carré
        ligne=ev.x//100
        colonne=ev.y//100
        k=6*colonne+ligne
        print(k)
     
     
    for k in range(36): #créer 36 carrés
        colonne=k%6
        ligne=k//6
        a=10+colonne*100
        b=10+ligne*100
        c=a+80
        d=b+80
        liste_carres.append(canvas.create_rectangle(a,b,c,d,fill='red'))
     
     
    canvas.bind('<Button-1>',action)
     
    fenetre.mainloop()

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 715
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 715
    Par défaut
    Salut,

    Citation Envoyé par reborn1234 Voir le message
    J'ai essayé avec la méthode .itemconfig mais il me manque le nom de l'élément graphique
    Il ne vous manque rien: vous avez stocké l'identifiant de chaque élément graphique/item du Canvas dans liste_carres.
    Cet identifiant est un entier qui se récupère via liste_carres[k]. C'est ce qu'attend .itemconfig pour savoir quel item modifier.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2018
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2018
    Messages : 26
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Salut,



    Il ne vous manque rien: vous avez stocké l'identifiant de chaque élément graphique/item du Canvas dans liste_carres.
    Cet identifiant est un entier qui se récupère via liste_carres[k]. C'est ce qu'attend .itemconfig pour savoir quel item modifier.

    - W
    Merci de votre réponse, cependant j'ai toujours un petit problème
    Je ne comprend pas comment récupérer un identifiant via liste_carres[k], je suppose qu'il faut utiliser la méthode get mais ça reste flou pour moi...

    Et lorsque j'obtiendrais l'identifiant pour modifier la couleur je devrais faire : canvas.itemconfig(identifiant,fill='blue') ?

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 715
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 715
    Par défaut
    Salut,

    Citation Envoyé par reborn1234 Voir le message
    Je ne comprend pas comment récupérer un identifiant via liste_carres[k], je suppose qu'il faut utiliser la méthode get mais ça reste flou pour moi...
    Si vous stockez vos identifiants dans une liste, on peut supposer que vous sachiez les utiliser. Sinon, c'est un type de base du langage, avant de comprendre, il faut essayer d'apprendre: ouvrez un tuto. et relisez les chapitres qui montrent comment les utiliser.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2018
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2018
    Messages : 26
    Par défaut
    Bonjour j'ai suivi vos conseils et j'ai trouvé une solution

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    canvas.itemconfig(liste_carres[15],fill='blue')
    canvas.itemconfig(liste_carres[2],fill='blue')

    je modifie donc la couleur de chaque carré un par un , par exemple ici je met le 15eme et 2eme carré en bleu.

    Et si je souhaite mettre plusieurs carrés de la même couleur y a-t-il une façon de faire cela sur une ligne au lieu de faire comme ici une ligne de code par carré ?

  6. #6
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 715
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 715
    Par défaut
    Citation Envoyé par reborn1234 Voir le message
    Et si je souhaite mettre plusieurs carrés de la même couleur y a-t-il une façon de faire cela sur une ligne au lieu de faire comme ici une ligne de code par carré ?
    Le Canvas vous permet d'étiqueter vos carrés avec des tags: canvas.itemconfig(le_tag, fill='blue') modifiera tous les items ayant le tag "le_tag".

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 05/03/2016, 13h01
  2. Réponses: 3
    Dernier message: 05/10/2006, 18h52
  3. [Tkinter] Méthode get() dans une boucle while
    Par Thundie dans le forum Tkinter
    Réponses: 2
    Dernier message: 04/02/2006, 00h06
  4. Afficher les élements d'un formulaire dans une autre fenetre
    Par BernardT dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 11/12/2005, 22h52
  5. Appel de methode dont le nom est dans une variable
    Par osopardo dans le forum Langage
    Réponses: 1
    Dernier message: 24/11/2005, 20h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo