Учебник Tkinter - Кнопка

  1. Кнопка Tkinter default опция
  2. Обратный вызов команды кнопки Tkinter Button

Виджет кнопки Tkinter достаточно похож на виджет Tkinter Label. Он имеет почти те же опции, что и в метке, за исключением одной дополнительной опции по умолчанию. Подробнее об этом default мы расскажем после одного основного примера с кнопкой.

Ниже вы можете сгенерировать две простейшие кнопки, используя демонстрационные коды.

Tkinter Button_Basic.py
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()
button1 = tk.Button(app, text="Python Label 1")
button2 = tk.Button(app, text="Python Label 2")
button1.pack(side=tk.LEFT)
button2.pack(side=tk.LEFT)
app.mainloop()

Окно с двумя кнопками, расположенными рядом друг с другом, показывается после того, как вы запустили коды.

Tkinter Tutorial_Basic Label

Кнопка Tkinter default опция

Опция по умолчанию в кнопке говорит о том, что кнопка является кнопкой по умолчанию в GUI, например, кнопкой, которая вызывается автоматически при нажатии пользователем кнопки входа или возврата.

Обратный вызов команды кнопки Tkinter Button

Опция команда вызывает функцию обратного вызова при нажатии кнопки.

Tkinter Button_command callback.py
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():
    counter = int(str(labelExample['text']))
    counter += 1
    labelExample.config(text=str(counter))
    
buttonExample = tk.Button(app, text="Increase", width=30,
                          command=change_label_number)

buttonExample.pack()
labelExample.pack()
app.mainloop()

Она создает кнопку и виджет метки в главном окне. При каждом нажатии кнопки номер в тексте метки увеличивается на 1.

Обратный вызов команды Tkinter Tutorial_Button

def change_label_number():
    counter = int(str(labelExample['text']))
    counter += 1
    labelExample.config(text=str(counter))

Функция change_label_number вызывается при нажатии на кнопку. Она получает номер метки, а затем устанавливает метку, увеличенную на единицу.

buttonExample = tk.Button(app, text="Increase", width=30,
                          command=change_label_number)

Она строит привязку между кнопкой и функцией обратного вызова.

Функция обратного вызова команд для кнопок с аргументами

Вам нужен объект partial из functools, если вам нужно передать аргументы в функции обратного вызова. partial объекты - это вызываемые объекты с позиционными аргументами args и аргументами ключевых слов keywords.

Ниже приведен фрагмент кода, демонстрирующий, как использовать эту partial функцию в команде с кнопкой.

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))
comments powered by Disqus