Como Passar Argumentos ao Comando do Botão Tkinter

Jinku Hu 30 janeiro 2023
  1. Passar os argumentos para o command no Botão Tkinter com partials
  2. Passe Argumentos para command no Botão Tkinter com a função lambda
Como Passar Argumentos ao Comando do Botão Tkinter

A opção command no Tkinter Button é acionada quando o usuário pressiona o botão. Em alguns cenários, você precisa passar argumentos para a função de comando anexada, mas não poderia simplesmente passar os argumentos como abaixo,

button = tk.Button(app, text="Press Me", command=action(args))

Vamos introduzir duas maneiras de passar os argumentos para a função de comando.

Passar os argumentos para o command no Botão Tkinter com partials

Como demonstrado em Python Tkinter tutorial, você tem a opção de utilizar o objeto partial do 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)
)

O partial(change_label_numer, 2) retorna um objeto chamável que se comporta como um func quando é chamado.

Passe Argumentos para command no Botão Tkinter com a função lambda

Você também pode utilizar o operador ou função Python lambda para criar uma função temporária e simples para ser chamada quando o Button é clicado.

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

Você não precisa de nenhum argumento neste exemplo, portanto, você poderia deixar a lista de argumentos vazia e apenas escrever a expressão.

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

Artigo relacionado - Tkinter Button