Tkinter command binding в Python — связывание кнопок с функциями

Рассмотрим привязку команд Tkinter, которая связывает обратный вызов с событием виджета.

Содержание

Введение в Tkinter command binding

Чтобы сделать приложение более интерактивным, виджеты должны реагировать на такие события, как:

  • Щелчки мыши
  • Нажатия клавиш

Для этого требуется назначить функцию обратного вызова определенному событию. Когда событие происходит, функция обратного вызова будет вызвана автоматически для обработки события.

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

Это означает, что вы можете назначить имя функции командной опции виджета, чтобы при возникновении события в виджете функция вызывалась автоматически.

Чтобы использовать привязку команд, выполните следующие действия:

  • Сначала определите функцию как обратный вызов.
  • Затем присвойте имя функции параметру команды виджета.

Например, следующее определяет функцию с именем button_clicked():

def button_clicked():
    print('Button clicked')

После этого вы можете связать функцию с опцией команды виджета кнопки:

ttk.Button(root, text='Click Me',command=button_clicked)

Обратите внимание, что вы передаете обратный вызов без скобок() в опции команды. В противном случае обратный вызов будет вызван сразу после запуска программы.

Следующая программа иллюстрирует, как связать функцию обратного вызова button_clicked с виджетом Button:

import tkinter as tk
from tkinter import ttk

root = tk.Tk()


def button_clicked():
    print('Button clicked')


button = ttk.Button(root, text='Click Me', command=button_clicked)
button.pack()

root.mainloop()

Аргументы Tkinter button command

Если вы хотите передать аргументы функции обратного вызова, вы можете использовать лямбда-выражение.

Сначала определите функцию, которая принимает аргумент args:

def callback_function(args):
    # do something

Затем определите лямбда-выражение и назначьте его аргументу команды виджета кнопки. Внутри лямбда-выражения вызовите функцию обратного вызова:

ttk.Button(
    root,
    text='Button',
    command=lambda: callback(args)
)

Следующая программа иллюстрирует, как передать аргумент функции обратного вызова, связанной с командой кнопки:

import tkinter as tk
from tkinter import ttk

root = tk.Tk()


def select(option):
    print(option)


ttk.Button(root, text='Rock', command=lambda: select('Rock')).pack()
ttk.Button(root, text='Paper',command=lambda: select('Paper')).pack()
ttk.Button(root, text='Scissors', command=lambda: select('Scissors')).pack()

root.mainloop()

При нажатии кнопки будет выполнено лямбда-выражение, связанное с командой кнопки. Оно вызовет функцию select() со строковым аргументом.

Ограничения привязки команд

Во-первых, опция команды доступна не во всех виджетах; она ограничена кнопкой и некоторыми другими виджетами.

Во-вторых, кнопка «Command» привязана к левому щелчку и кнопке Backspace, но не привязана к клавише Return. Чтобы проверить это, вы можете переместить фокус на кнопку в программе выше и нажать клавиши Backspace и Return.

К сожалению, это не очень удобно для пользователя, и вы не можете легко изменить привязку командной функции. Чтобы преодолеть эти ограничения, Tkinter предоставляет альтернативный способ связывания функции с событием, называемый привязкой события.

Похожие посты
Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *