Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 22/11/2014, à 11:32

Gaara

python - connecter une liste de boutons [résolu]

Salut à tous,
J'essaie de connecter une liste de boutons en GTK (20 boutons au maximum, avec une image dedans et un texte en dessous) pour reconnaître sur quel bouton l'utilisateur clique.

La construction ( __init__) se fait comme ça:

self.img = [gtk.Image() for l in xrange(20)]
self.bouton = [gtk.Button() for n in xrange(20)]
for image in self.img:   
    self.img[i].set_from_pixbuf(None)
    self.bouton[i].add(self.img[i])
    #self.bouton[i].connect("clicked", self.result)       -> avec cette ligne, le callback est identique pour chaque bouton. Donc pas bon.
    self.bouton[0].connect("clicked", self.result0)
    self.bouton[1].connect("clicked", self.result1)      -> ici ça fonctionne, mais demande 20 "def" différents
    [...]
    self.bouton[20].connect("clicked", self.result20)
    
    # insertion des boutons-images dans un tableau organisé

Donc ma question est: est-possible de créer une "liste" de def ?
Sinon, comment faire ?

Merci

Edit: un screen du résultat, mais pour le moment cliquer sur l'image ne fonctionne pas (sauf si je crée 20 callbacks différents):
1416648912.png

Dernière modification par Gaara (Le 22/11/2014, à 14:22)


Kubuntu 18.04 x64
Un terminal tactile Raspberry Pi et Odroid

                                        <code>zenity  --question --title "Alert"  --text "Microsoft Windows has been found! Would you like to remove it?"</code>

Hors ligne

#2 Le 22/11/2014, à 12:55

pingouinux

Re : python - connecter une liste de boutons [résolu]

Bonjour,

    self.bouton[0].connect("clicked", self.result0)
    self.bouton[1].connect("clicked", self.result1)      -> ici ça fonctionne, mais demande 20 "def" différents
    [...]
    self.bouton[20].connect("clicked", self.result20)

Cette séquence devrait être en dehors de la boucle.

Il me paraîtrait plus logique de faire la boucle sur les indices, et que result0, result1… soient dans une liste.

Tu pourrais aussi créer un objet mon_bouton, qui contiendrait un objet Image et un objet Bouton.

Hors ligne

#3 Le 22/11/2014, à 13:11

Gaara

Re : python - connecter une liste de boutons [résolu]

Bonjour pingouinux,

Donc si je comprend bien il faudrait que je laisse dans la boucle

self.bouton[i].connect("clicked", self.result)

mais le soucis c'est que chaque bouton renvoie sur le meme "callback" (def result en l'occurence), et le programme ne peux pas reconnaître quel bouton est cliqué.

Donc si je fais

self.bouton[i].connect("clicked", self.result[i])

et si je crée une liste de 20 fonctions, ça fonctionnerait peut-être ?


Kubuntu 18.04 x64
Un terminal tactile Raspberry Pi et Odroid

                                        <code>zenity  --question --title "Alert"  --text "Microsoft Windows has been found! Would you like to remove it?"</code>

Hors ligne

#4 Le 22/11/2014, à 13:22

pingouinux

Re : python - connecter une liste de boutons [résolu]

Donc si je fais

self.bouton[i].connect("clicked", self.result[i])

et si je crée une liste de 20 fonctions, ça fonctionnerait peut-être ?

Normalement oui.

Hors ligne

#5 Le 22/11/2014, à 13:28

Gaara

Re : python - connecter une liste de boutons [résolu]

Ok, je vais voir pour créer cette liste alors tongue

list_fonct = []
for i in range(20):
    def result(x, i=i):
       print i
    list_fonct.append(result)

Merci, je te tiens au courant.

Dernière modification par Gaara (Le 22/11/2014, à 13:29)


Kubuntu 18.04 x64
Un terminal tactile Raspberry Pi et Odroid

                                        <code>zenity  --question --title "Alert"  --text "Microsoft Windows has been found! Would you like to remove it?"</code>

Hors ligne

#6 Le 22/11/2014, à 13:52

Gaara

Re : python - connecter une liste de boutons [résolu]

Ça fonctionne !

self.img = [gtk.Image() for l in xrange(20)]
self.bouton = [gtk.Button() for n in xrange(20)]
self.list_fonct = []
for i in range(0, 20):
    def result(locals, i=i):
        print i
    self.list_fonct.append(result)
i=0
for image in self.img:   
    self.img[i].set_from_pixbuf(None)
    self.bouton[i].add(self.img[i])
    self.bouton[i].connect("clicked", self.list_fonct[i])
    i = i + 1

Retour:
bouton 0 : 0
bouton 1 : 1
etc

Merci !

Dernière modification par Gaara (Le 22/11/2014, à 14:09)


Kubuntu 18.04 x64
Un terminal tactile Raspberry Pi et Odroid

                                        <code>zenity  --question --title "Alert"  --text "Microsoft Windows has been found! Would you like to remove it?"</code>

Hors ligne

#7 Le 22/11/2014, à 14:04

pingouinux

Re : python - connecter une liste de boutons [résolu]

Ça fonctionne !

Je suis surpris…(voir la remarque n°2)

  1. Avant la 1ère boucle, i=0 est inutile

  2. Dans la seconde boucle, i est toujours nul, image n'est pas utilisé. Il faut boucler sur i comme dans la 1ère

Correction : orthographe

Dernière modification par pingouinux (Le 25/11/2014, à 22:35)

Hors ligne

#8 Le 22/11/2014, à 14:06

Gaara

Re : python - connecter une liste de boutons [résolu]

Ah oui, j'ai oublié de noter:

i = i+1

a la fin. Je corrige

Edit:

image n'est pas utilisé

Je mets "None" pour ne pas afficher d'image lorsque le programme démarre. (avec un button.hide() que je n'ai pas noté ici)
Et pour tout t'avouer, j'ai posé la question aussi sur stackoverflow!

Dernière modification par Gaara (Le 22/11/2014, à 14:13)


Kubuntu 18.04 x64
Un terminal tactile Raspberry Pi et Odroid

                                        <code>zenity  --question --title "Alert"  --text "Microsoft Windows has been found! Would you like to remove it?"</code>

Hors ligne