HOWTO · Tkinter
Cómo pasar argumentos al comando del botón Tkinter
Cómo pasar argumentos al comando del botón Tkinter
En esta página
La opción command en el widget Tkinter Button se activa cuando el usuario pulsa el botón. En algunos escenarios, necesitas pasar los argumentos a la función de comando adjunta, pero no puedes simplemente pasar los argumentos como se muestra a continuación,
button = tk.Button(app, text="Press Me", command=action(args))
Introduciremos dos formas de pasar los argumentos a la función de comando.
Pasar los argumentos a command en el botón Tkinter con parciales
Como se demuestra en Python Tkinter tutorial, tienes la opción de usar el objeto parcial del módulo functools.
from sys import version_info
if version_info.major == 2:
import Tkinter as tk
elif version_info.major == 3:
import tkinter as tk
from functools import partial
app = tk.Tk()
labelExample = tk.Button(app, text="0")
def change_label_number(num):
counter = int(str(labelExample["text"]))
counter += num
labelExample.config(text=str(counter))
buttonExample = tk.Button(
app, text="Increase", width=30, command=partial(change_label_number, 2)
)
buttonExample.pack()
labelExample.pack()
app.mainloop()
buttonExample = tk.Button(
app, text="Increase", width=30, command=partial(change_label_number, 2)
)
partial(change_label_numer, 2) devuelve un objeto llamable que se comporta como una func cuando es llamado.
Pasa los argumentos a command en Tkinter Button con la función lambda
También puede usar el operador o función lambda de Python para crear una función temporal y sencilla de una sola vez que se llame cuando se haga clic en Button.
from sys import version_info
if version_info.major == 2:
import Tkinter as tk
elif version_info.major == 3:
import tkinter as tk
app = tk.Tk()
labelExample = tk.Button(app, text="0")
def change_label_number(num):
counter = int(str(labelExample["text"]))
counter += num
labelExample.config(text=str(counter))
buttonExample = tk.Button(
app, text="Increase", width=30, command=lambda: change_label_number(2)
)
buttonExample.pack()
labelExample.pack()
app.mainloop()
The syntax of lambda function is
lambda: argument_list: expression
No necesitas ningún argumento en este ejemplo, por lo tanto, puedes dejar la lista de argumentos vacía y sólo escribir la expresión.
buttonExample = tk.Button(
app, text="Increase", width=30, command=lambda: change_label_number(2)
)