# Tkinter: créer des boutons dans une boucle

**URL:** <https://www.debian-fr.org/t/tkinter-creer-des-boutons-dans-une-boucle/70143>\
**Category:** Programmation\
**Created:** [Juin 27, 2016, 11:30 UTC](https://www.debian-fr.org/t/tkinter-creer-des-boutons-dans-une-boucle/70143 "2016-06-27T11:30:07Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![totola](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/t/3be4f8/32.png) [@totola](https://www.debian-fr.org/u/totola)\
**Post date:** [Juin 27, 2016, 11:30 UTC](https://www.debian-fr.org/t/tkinter-creer-des-boutons-dans-une-boucle/70143/1 "2016-06-27T11:30:07Z")

</div>

Bonjour,  
J’aimerai utiliser une boucle pour créer une vingtaine de boutons similaires situés chacun dans un canvas différent et executant une commande différente voilà mon code associé:

```
		def Ecouter(num_poste):
			if ve[num_poste].get() == 1:					
				self.caskp1=self.canvas_image[num_poste].create_image(2,2, image=cask, anchor='nw')
			else:
				self.canvas_image[num_poste].delete(self.caskp1)

		buttonE=[None]
		i=1
		while(i<3):
			buttonE.append(Tkinter.Checkbutton(self.canvasp[i],image=self.caskN, variable = ve[i],command=lambda:Ecouter(i),indicatoron=0))	
			buttonE[i].place(x=0,y=2)
			i=i+1

```

Pour l’instant je ne crée que deux boutons, ils sont bien créés à la bonne place avec la bonne image, il n’y a donc pas de problème avec le remplissage de la liste buttonE.

Par contre lorsque je clique dessus il ne se passe strictement rien…

Alors que si je crée le bouton à la main:

```
		buttonE1 = Tkinter.Checkbutton(self.canvasp[1],image=self.caskN, variable = ve[1],command=lambda:Ecouter(1),indicatoron=0)
		buttonE1.place(x=0,y=2)

```

Tout fonctionne bien…

Une idée?  
Merci

---

<div class="post-metadata">

**Author:** ![totola](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/t/3be4f8/32.png) [@totola](https://www.debian-fr.org/u/totola)\
**Post date:** [Juin 27, 2016, 12:59 UTC](https://www.debian-fr.org/t/tkinter-creer-des-boutons-dans-une-boucle/70143/2 "2016-06-27T12:59:58Z")

</div>

Hum le problème vient de la variable i

si je mets while(i\<3)

Ecouter(i)

Il me lance Ecouter(3) quelque soit la situation, je ne vois pas comment faire… Je vais les écrire à la main pour avancer mais si quelqu’un a une idée je suis preneur!

Merci

---

<div class="post-metadata">

**Author:** ![totola](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/t/3be4f8/32.png) [@totola](https://www.debian-fr.org/u/totola)\
**Post date:** [Juin 27, 2016, 5:56 UTC](https://www.debian-fr.org/t/tkinter-creer-des-boutons-dans-une-boucle/70143/3 "2016-06-27T17:56:07Z")

</div>

Je crois que la solution est expliqué ici mais je ne suis pas assez fort en anglais et assez calé pour tout comprendre…

> <https://stackoverflow.com/questions/16224368/tkinter-button-commands-with-lambda-in-python>

Je me trompe?

---

<div class="post-metadata">

**Author:** ![totola](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/t/3be4f8/32.png) [@totola](https://www.debian-fr.org/u/totola)\
**Post date:** [Juin 27, 2016, 9:17 UTC](https://www.debian-fr.org/t/tkinter-creer-des-boutons-dans-une-boucle/70143/4 "2016-06-27T21:17:30Z")

</div>

Mouarf… Je ne suis pas très doué en anglais mais quand même il suffisait de faire un petit effort, la solution est de rajouter:

`command= lambda i=i: maCommande(i)`

ça marche nickel 🙂
