Cómo pasar argumentos al comando del botón Tkinter

Jinku Hu 30 enero 2023
  1. Pasar los argumentos a command en el botón Tkinter con parciales
  2. Pasa los argumentos a command en Tkinter Button con la función lambda
Cómo pasar argumentos al comando del botón Tkinter

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)
)
Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

Artículo relacionado - Tkinter Button