2016-11-25 15:20 GMT+01:00 Marcello <marce...@linuxvil.it>: > Ciao a tutti, > ho un problemino con Tkinter Button, > devo creare una finestra con svariati bottoni che mi andranno ad eseguite > dei comandi batch. > 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. > Grazie per l'aiuto > > Marcello > > -------------------------------------- > from Tkinter import * > root= Tk() > def premuto (numero): > print ("premuto bottone ",numero) > #root.destroy() > > finestra = Frame(root) > finestra.pack() > for numero in range(1,7): > pulsante = "pulsante" + str(numero) > pulsante = Button(finestra) > pulsante["text"] = "pulsante" > pulsante["background"] = "black" > pulsante["command"] = lambda: premuto(numero) > pulsante["fg"] = "red" > pulsante.pack() > root.mainloop() > ---------------------------------------------- > > Ciao,
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: >>> for x in range(1, 3): ... print(x) ... 1 2 >>> print(x) 2 >>> Una possibile soluzione e` quella di creare un factory builder per i tuoi bottoni: from Tkinter import * root= Tk() def premuto (numero): print ("premuto bottone ",numero) #root.destroy() def factory_btn(num): Button(finestra, text="pulsante {}".format(numero), background="black", command=lambda: premuto(num), fg="red").pack() finestra = Frame(root) finestra.pack() for numero in range(1,3): factory_btn(numero) root.mainloop() Cosi` facendo viene creata e riservata una referenza corretta al numero per la callback assegnata a command. Ho utilizzato il costruttore direttamente, ma seguendo il tuo codice possiamo scrivere cosi` la funzione factory_btn: def factory_btn(num): pulsante = Button(finestra) pulsante["text"] = "pulsante" pulsante["background"] = "black" pulsante["command"] = lambda: premuto(num) pulsante["fg"] = "red" pulsante.pack() Sani Strap
_______________________________________________ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python