[Python]Reference dans boucle for

Résolu/Fermé
Gozmo
Messages postés
79
Date d'inscription
samedi 4 octobre 2008
Statut
Membre
Dernière intervention
13 septembre 2012
- 22 avril 2009 à 22:38
Gozmo
Messages postés
79
Date d'inscription
samedi 4 octobre 2008
Statut
Membre
Dernière intervention
13 septembre 2012
- 26 avril 2009 à 15:52
Bonjour,

Je dois récupérer la reference d'éléments créés dans une boucle for. Pour plus de clarté, un bout de code:
i = 0
donnees = ['elet1', 'elet2', 'elet3']
for ref in donnees:
    Tkinter.Button(self, text = ref, command = lambda: self.test(ref)).grid(row = i, column = 0)
    i += 2

def test(self,enf):
    print enf

(bout de code pour exemple, mon problème se situ avec une mise en page un petit peu plus complexe et un liste de quelques centaines de references)

Il me faut recupérer "ref", mais puisque "ref" prend les valeurs successive de la liste parcourue, je ne vois pas comment faire pour savoir quel button est selectionné.

C'est peu être très simple, mais à m'obstiner dessus, je vois plus grand chose (et je vais finir par m'arracher ce qu'il me reste de cheveux!). Si une bonne ame pouvait me donner une piste, ca me rendrais bien service.

Merci

1 réponse

Gozmo
Messages postés
79
Date d'inscription
samedi 4 octobre 2008
Statut
Membre
Dernière intervention
13 septembre 2012

26 avril 2009 à 15:52
Bonjour,

Finalement j'ai utilisé des CheckButton en m'inspirant du post:
 http://www.commentcamarche.net/forum/affich 2207644 python recuperer valeur checkbutton 

C'est du code un peu barbare et je n'en suis pas vraiment satisfait, mais comme on dit: "c'est en codant que l'on devient codeur...". Pour le cas où cela puisse inspirer une personne en galère, voici le code:
    def deplier(self, conteneur, taxon, ligne = 0):
        """Mise en page de la liste"""
        lignec, id_tax, cont = ligne, taxon, conteneur
        liste = self.liste_taxon[id_tax][3]
        liste.sort()
        for tax in liste:
            value = Tkinter.IntVar()
            value.set(self.liste_taxon[tax][4])
            checkbax = Tkinter.Checkbutton(cont.interior(), variable = value, command = self.refresh)
            self.checkb[tax] = value
            checkbax.grid(row = lignec, column = 0)
            Tkinter.Label(cont.interior(), text=self.liste_taxon[tax][0],
                          font='Arial 10', width = 30, anchor = "w").grid(row = lignec, column = 1)
            lignec += 1
            if self.liste_taxon[tax][4] == 1:
                self.frametest.append(Pmw.Group(cont.interior(), tag_text=self.liste_taxon[tax][0]))
                self.frametest[-1].grid(row = lignec, column = 1)
                lignec += 1
                self.deplier(conteneur = self.frametest[-1], taxon = tax, ligne = 0)

    def refresh(self):
        """Mettre a jour la liste"""
        for (tax, box) in self.checkb.items():
            self.liste_taxon[tax][4] = box.get()
        self.initialize()

Si quelqu'un a des suggestions pour améliorer, je suis preneur.

Bonne journée.
0