Estoy intentando crear botones en tkinter dentro de un bucle for. Y con cada ciclo, pase el valor de conteo como un argumento en el valor de comando. Entonces, cuando se llama a la función desde el valor del comando, puedo decir qué botón se presionó y actuar en consecuencia. El problema es, digamos que len es 3, creará 3 botones con los títulos "Juego 1" hasta "Juego 3", pero cuando se presiona cualquiera de los botones, el valor impreso es siempre 2, la última iteración. Entonces parece que los botones se están haciendo como entidades separadas, pero el valor de i en los argumentos del comando parece ser el mismo. Aquí está el código:Botones de creación de tkinter de Python para argumentos de comando de paso de bucle
def createGameURLs(self):
self.button = []
for i in range(3):
self.button.append(Button(self, text='Game '+str(i+1),command=lambda:self.open_this(i)))
self.button[i].grid(column=4, row=i+1, sticky=W)
def open_this(self, myNum):
print(myNum)
¿Hay una manera de obtener el valor de la corriente i, en cada iteración, a seguir con ese botón en particular? Gracias de antemano.
Muchas gracias a los dos LukaD y BrenBarn, he estado luchando con eso durante varios días, créanlo o no. Ambas formas funcionaron perfectamente. Fui con el i = i fix por ahora, pero definitivamente voy a leer sobre los functools. Agradezco ambas respuestas. – Marcel
Si la solución BrenBarns funciona para usted, entonces debe marcarla como su respuesta aceptada. – lukad
posible duplicado de [pasar el argumento en el comando de botón Tkinter de python] (http://stackoverflow.com/questions/6920302/passing-argument-in-python-tkinter-button-command) –