Виджет Tkinter Button в Python — создание кнопок
В этом руководстве вы узнаете о виджете Tkinter Button и о том, как использовать его в Python для создания различных видов кнопок.
- Что такое виджет Tkinter Button?
- Обратный вызов command
- Состояния кнопок
- Примеры Tkinter Button
- 1) Простой пример кнопки Tkinter
- 2) Пример кнопки изображения Tkinter
- 3) Отображение текста на кнопке изображения
Что такое виджет Tkinter Button?
Виджеты кнопок представляют собой кликабельный элемент в приложениях. Обычно вы используете текст или изображение для отображения действия, которое будет выполнено при щелчке.
Кнопки могут отображать текст одним шрифтом. Однако текст может занимать несколько строк. Кроме того, вы можете сделать один из символов подчеркнутым, чтобы обозначить сочетание клавиш.
Чтобы автоматически вызывать функцию или метод класса при нажатии кнопки, вы назначаете ее параметр команды функции или методу. Это называется привязкой команды в Tkinter.
Для создания кнопки используйте конструктор ttk.Button следующим образом:
button = ttk.Button(master, **option)
Button имеет много опций. Однако типичные из них такие:
button = ttk.Button(master, text, command)
В этом синтаксисе:
- master — это родительский виджет, на котором вы размещаете кнопку.
- text — это метка кнопки.
- command определяет функцию обратного вызова, которая будет вызвана автоматически при нажатии кнопки.
Обратный вызов command
Параметр command связывает действие кнопки с функцией или методом класса. Когда вы нажимаете кнопку, она автоматически вызывает функцию обратного вызова.
Чтобы назначить обратный вызов параметру command, можно использовать лямбда-выражение:
def callback(): # do something ttk.Button( root, text="Demo Button", command=callback )
Если функция содержит одно выражение, используйте лямбда-выражение:
ttk.Button( root, text="Demo Button", command=lambda_expression )
Состояния кнопок
Состояние Button по умолчанию — normal. В нормальном состоянии кнопка будет реагировать на события мыши и нажатия клавиатуры, вызывая функцию обратного вызова, назначенную ее опции command.
Кнопка также может иметь отключенное состояние. В отключенном состоянии кнопка отображается серым цветом и не реагирует на события мыши и нажатия клавиатуры.
Для управления состоянием кнопки используется метод state():
# set the disabled flag button.state(['disabled']) # remove the disabled flag button.state(['!disabled'])
Примеры Tkinter Button
Давайте рассмотрим несколько примеров использования виджетов-кнопок.
1) Простой пример кнопки Tkinter
Следующая программа показывает, как отобразить кнопку «Exit». При нажатии на нее программа завершается.
import tkinter as tk from tkinter import ttk # root window root = tk.Tk() root.geometry('300x200') root.resizable(False, False) root.title('Button Demo') # exit button exit_button = ttk.Button( root, text='Exit', command=lambda: root.quit() ) exit_button.pack( ipadx=5, ipady=5, expand=True ) root.mainloop()
Выход:
Как это работает.
Следующий код создает кнопку «Exit»:
exit_button = ttk.Button( root, text='Exit', command=lambda: root.quit() )
Команда кнопки назначается лямбда-выражению, которое закрывает корневое окно.
2) Пример кнопки изображения Tkinter
Следующая программа показывает, как отобразить кнопку изображения. Чтобы попрактиковаться в этом примере, вам нужно сначала загрузить следующее изображение:
Просто щелкните правой кнопкой мыши и сохраните его в папке, доступной из следующей программы, например, в папке assets:
import tkinter as tk from tkinter import ttk from tkinter.messagebox import showinfo # root window root = tk.Tk() root.geometry('300x200') root.resizable(False, False) root.title('Image Button Demo') # download button def download_clicked(): showinfo( title='Information', message='Download button clicked!' ) download_icon = tk.PhotoImage(file='./assets/download.png') download_button = ttk.Button( root, image=download_icon, command=download_clicked ) download_button.pack( ipadx=5, ipady=5, expand=True ) root.mainloop()
Выход:
Как это работает.
- Сначала создайте новый экземпляр класса tk.PhotoImage, который ссылается на файл изображения «./assets/download.png».
- Во-вторых, создайте кнопку ttk.Button, параметру изображения которой будет назначено изображение.
- В-третьих, назначьте функцию опции команды. Когда вы нажмете кнопку, она вызовет функцию download_clicked, которая выведет окно сообщения.
3) Отображение текста на кнопке изображения
Чтобы отобразить на кнопке и текст, и изображение, вам нужно использовать параметр compound. Если вы этого не сделаете, кнопка будет отображать только текст, а не изображение.
Ниже показано, как отобразить на кнопке и текст, и изображение:
import tkinter as tk from tkinter import ttk from tkinter.messagebox import showinfo # root window root = tk.Tk() root.geometry('300x200') root.resizable(False, False) root.title('Image Button Demo') # download button handler def download_clicked(): showinfo( title='Information', message='Download button clicked!' ) download_icon = tk.PhotoImage(file='./assets/download.png') download_button = ttk.Button( root, image=download_icon, text='Download', compound=tk.LEFT, command=download_clicked ) download_button.pack( ipadx=5, ipady=5, expand=True ) root.mainloop()
Выход: