Виджет Tkinter Button в Python — создание кнопок

В этом руководстве вы узнаете о виджете Tkinter Button и о том, как использовать его в Python для создания различных видов кнопок.

Содержание

Что такое виджет 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»:

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()

Выход:

Пример отображения на кнопке и текста, и изображения

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

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