Tkinter.Button: примеры (PYTHON)
tkinter.Button(master: widget, **options): Button objectФункция tkinter.Button в библиотеке Tkinter
Функция tkinter.Button является конструктором класса Button, который создает кнопочный виджет в графических интерфейсах Tkinter. Этот виджет применяется для создания интерактивных кнопок, которые пользователь может нажимать для выполнения определенных действий.
Основные аргументы функции:
- master (обязательный): родительское окно или фрейм, где размещается кнопка.
- text: текст, отображаемый на кнопке.
- command: функция или метод, выполняемый при нажатии кнопки.
- image: изображение, отображаемое на кнопке вместо текста.
- width и height: размеры кнопки в символах или пикселях.
- fg и bg: цвета текста и фона.
- font: шрифт для текста.
- state: состояние кнопки (normal, disabled, active).
- relief: стиль границы (flat, raised, sunken, groove, ridge).
- anchor: выравнивание содержимого (n, s, e, w, center).
- cursor: вид курсора при наведении.
Конструктор возвращает экземпляр класса Button, который затем может быть размещен с помощью менеджеров геометрии pack, grid или place.
Примеры использования tkinter.Button
Простая текстовая кнопка
import tkinter as tk
def button_click():
label.config(text="Кнопка нажата")
root = tk.Tk()
button = tk.Button(root, text="Нажми меня", command=button_click)
button.pack()
label = tk.Label(root, text="Ожидание")
label.pack()
root.mainloop()Создается окно с кнопкой и меткой. При нажатии на кнопку текст метки меняется.
Кнопка с изображением
import tkinter as tk
root = tk.Tk()
photo = tk.PhotoImage(file="icon.png")
button = tk.Button(root, image=photo)
button.pack()
root.mainloop()Создается кнопка с изображением из файла icon.png.
Кнопка с измененным состоянием
import tkinter as tk
root = tk.Tk()
button = tk.Button(root, text="Неактивная", state="disabled")
button.pack()
root.mainloop()Создается неактивная кнопка, которая не реагирует на нажатия.
Похожие виджеты в Tkinter
tkinter.Label используется для отображения статического текста или изображений, но не поддерживает команды нажатия.
tkinter.Checkbutton и tkinter.Radiobutton являются специализированными кнопками с состояниями выбора.
ttk.Button из модуля ttk предоставляет стилизованные кнопки с поддержкой тем оформления. Их применяют для современных интерфейсов.
Аналоги в других языках программирования
JavaScript (HTML)
Создается HTML-кнопка с обработчиком события click.
Java (Swing)
JButton button = new JButton("Нажми меня");
button.addActionListener(e -> System.out.println("Нажато"));Создается кнопка с использованием библиотеки Swing.
C# (Windows Forms)
Button button = new Button();
button.Text = "Нажми меня";
button.Click += (sender, e) => MessageBox.Show("Нажато");Создается кнопка в Windows Forms с обработчиком события Click.
Типичные ошибки
Передача функции со скобками в command
button = tk.Button(root, text="Ошибка", command=some_function())Функция выполняется сразу при создании кнопки. Правильно передавать ссылку на функцию без скобок.
Использование после уничтожения окна
import tkinter as tk
root = tk.Tk()
button = tk.Button(root, text="Кнопка")
button.pack()
root.destroy()
button.config(text="Новый текст")Ошибка TclError, так как попытка изменить виджет после уничтожения окна.
Изменения в последних версиях
В Tkinter 8.6 были улучшены параметры отображения на высокодюймовых экранах. Добавлена лучшая поддержка стилей для ttk.Button. Изменений в основных аргументах функции не было.
Расширенные примеры
Динамическое изменение свойств кнопки
import tkinter as tk
def toggle():
if button["state"] == tk.NORMAL:
button.config(state=tk.DISABLED, text="Отключена")
else:
button.config(state=tk.NORMAL, text="Активна")
root = tk.Tk()
button = tk.Button(root, text="Активна", command=toggle)
button.pack()
root.mainloop()Кнопка переключает свое состояние между активным и неактивным при каждом нажатии.
Кнопка с градиентным фоном через Canvas
import tkinter as tk
root = tk.Tk()
canvas = tk.Canvas(root, width=200, height=100)
canvas.pack()
button_id = canvas.create_rectangle(50, 25, 150, 75, fill="gray")
text_id = canvas.create_text(100, 50, text="Нажми")
canvas.tag_bind(button_id, "", lambda e: print("Нажато"))
canvas.tag_bind(text_id, "", lambda e: print("Нажато"))
root.mainloop() Создается имитация кнопки с использованием Canvas для кастомного оформления.