<div dir="ltr"><div class="gmail_extra"><br><div class="gmail_quote">2016-11-25 15:20 GMT+01:00 Marcello <span dir="ltr"><<a href="mailto:marcello@linuxvil.it" target="_blank">marcello@linuxvil.it</a>></span>:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">Ciao a tutti,<div>ho un problemino con Tkinter Button, </div><div>devo creare una finestra con svariati bottoni che mi andranno ad eseguite dei comandi batch. </div><div>Per la creazione dei pulsati pensavo di utilizzare un ciclo for. Il problema è che qualsiasi bottone io prema e come se  premessi l'ultimo. Dove sbaglio? I bottoni li ho creati tutti con nomi diversi.</div><div>Grazie per l'aiuto</div><div><br></div><div>Marcello</div><div><br></div><div>------------------------------<wbr>--------</div><div><div>from Tkinter import *</div><div>root= Tk()</div><div>def premuto (numero):</div><div><span class="gmail-m_3343597623441105033gmail-Apple-tab-span" style="white-space:pre-wrap">  </span>print ("premuto bottone ",numero)</div><div><span class="gmail-m_3343597623441105033gmail-Apple-tab-span" style="white-space:pre-wrap">    </span>#root.destroy()</div><div><br></div><div>finestra = Frame(root)</div><div>finestra.pack()</div><div>for numero in range(1,7):<span class="gmail-m_3343597623441105033gmail-Apple-tab-span" style="white-space:pre-wrap">   </span></div><div><span class="gmail-m_3343597623441105033gmail-Apple-tab-span" style="white-space:pre-wrap">       </span>pulsante = "pulsante" + str(numero)</div><div><span class="gmail-m_3343597623441105033gmail-Apple-tab-span" style="white-space:pre-wrap">  </span>pulsante = Button(finestra)</div><div><span class="gmail-m_3343597623441105033gmail-Apple-tab-span" style="white-space:pre-wrap">    </span>pulsante["text"] = "pulsante"</div><div><span class="gmail-m_3343597623441105033gmail-Apple-tab-span" style="white-space:pre-wrap">      </span>pulsante["background"] = "black"</div><div><span class="gmail-m_3343597623441105033gmail-Apple-tab-span" style="white-space:pre-wrap">   </span>pulsante["command"] = lambda: premuto(numero)</div><div><span class="gmail-m_3343597623441105033gmail-Apple-tab-span" style="white-space:pre-wrap">        </span>pulsante["fg"] = "red"</div><div><span class="gmail-m_3343597623441105033gmail-Apple-tab-span" style="white-space:pre-wrap">     </span>pulsante.pack()</div><div>root.mainloop()</div></div><div>------------------------------<wbr>----------------</div><div><br></div></div></blockquote><div><br></div><div>Ciao,</div><div><br></div><div>il problema sta nella variabile "numero" perche` e` il valore che viene assegnato durante il for e l'interprete mantiene quello per la durata del tuo programma:</div><div><br></div><div><div>>>> for x in range(1, 3):</div><div>...     print(x)</div><div>...</div><div>1</div><div>2</div><div>>>> print(x)</div><div>2</div><div>>>></div></div><div><br></div><div>Una possibile soluzione e` quella di creare un factory builder per i tuoi bottoni:</div><div><br></div><div><div>from Tkinter import *</div><div>root= Tk()</div><div><br></div><div>def premuto (numero):</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">        </span>print ("premuto bottone ",numero)</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">    </span>#root.destroy()</div><div><br></div><div>def factory_btn(num):</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">   </span>Button(finestra, text="pulsante {}".format(numero), background="black", command=lambda: premuto(num), fg="red").pack()</div><div><br></div><div>finestra = Frame(root)</div><div>finestra.pack()</div><div>for numero in range(1,3):</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">       </span>factory_btn(numero)</div><div><br></div><div>root.mainloop()</div></div><div><br></div><div>Cosi` facendo viene creata e riservata una referenza corretta al numero per la callback assegnata a command.</div><div>Ho utilizzato il costruttore direttamente, ma seguendo il tuo codice possiamo scrivere cosi` la funzione factory_btn:</div><div><br></div><div>def factory_btn(num):</div><div><div style="font-size:12.8px"><span class="gmail-m_3343597623441105033gmail-Apple-tab-span" style="white-space:pre-wrap">      </span>pulsante = Button(finestra)</div><div style="font-size:12.8px"><span class="gmail-m_3343597623441105033gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>pulsante["text"] = "pulsante"</div><div style="font-size:12.8px"><span class="gmail-m_3343597623441105033gmail-Apple-tab-span" style="white-space:pre-wrap">   </span>pulsante["background"] = "black"</div><div style="font-size:12.8px"><span class="gmail-m_3343597623441105033gmail-Apple-tab-span" style="white-space:pre-wrap">        </span>pulsante["command"] = lambda: premuto(num)</div><div style="font-size:12.8px"><span class="gmail-m_3343597623441105033gmail-Apple-tab-span" style="white-space:pre-wrap">        </span>pulsante["fg"] = "red"</div><div style="font-size:12.8px"><span class="gmail-m_3343597623441105033gmail-Apple-tab-span" style="white-space:pre-wrap">  </span>pulsante.pack()</div></div><div><br></div><div><br></div><div>Sani</div><div>Strap</div><div><br></div></div><br></div></div>