Как передать Аргументы команде кнопки Tkinter

Jinku Hu 30 Январь 2023 18 Апрель 2020
  1. Передать аргументы в command в Tkinter Button с partials
  2. Передача аргументов в command в Tkinter Button с помощью функции lambda
Как передать Аргументы команде кнопки Tkinter

Опция command в виджете Tkinter Button срабатывает при нажатии пользователем кнопки. В некоторых сценариях необходимо передавать аргументы в прикрепленную командную функцию, но нельзя просто передать аргументы, как показано ниже,

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

Мы представим два способа передачи аргументов в командную функцию.

Передать аргументы в command в Tkinter Button с partials

Как показано в Python Tkinter tutorial, у вас есть возможность использовать объект partial из модуля 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) возвращает вызываемый объект, который при вызове ведет себя как func.

Передача аргументов в command в Tkinter Button с помощью функции lambda

Вы также можете использовать оператор или функцию Python lambda для создания временной, одноразовой простой функции, которая будет вызываться при нажатии кнопки 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()

Синтаксис функции lambda заключается в следующем.

lambda: argument_list: expression

В этом примере аргументы не нужны, поэтому можно оставить список аргументов пустым и только записать выражение.

buttonExample = tk.Button(app, text="Increase", width=30,
                          command=lambda: change_label_number(2))
Author: 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

Сопутствующая статья - Tkinter Button