HOWTO · Tkinter
Como Passar Argumentos ao Comando do Botão Tkinter
Como passar argumentos para o comando do botão Tkinter
Nesta página
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)
)