#1 Le 22/11/2014, à 10: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):
Dernière modification par Gaara (Le 22/11/2014, à 13: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, à 11: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, à 12: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, à 12: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, à 12:28
- Gaara
Re : python - connecter une liste de boutons [résolu]
Ok, je vais voir pour créer cette liste alors
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, à 12: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, à 12: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, à 13: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, à 13:04
- pingouinux
Re : python - connecter une liste de boutons [résolu]
Ça fonctionne !
Je suis surpris…(voir la remarque n°2)
Avant la 1ère boucle, i=0 est inutile
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, à 21:35)
Hors ligne
#8 Le 22/11/2014, à 13: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, à 13: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