Рубрики
Без рубрики

Учебник по Tkinter – Использование кнопок Tkinter

Привет всем! В сегодняшней статье о Tkinter мы рассмотрим виджет кнопки Tkinter.

Автор оригинала: Pankaj Kumar.

Привет всем! В сегодняшней статье о Tkinter мы рассмотрим виджет кнопки Tkinter.

Виджет кнопки Tkinter – это очень простой и удобный в использовании виджет.

Давайте посмотрим, как мы можем создавать кнопки и добавлять функциональность в наше графическое приложение, используя несколько наглядных примеров!

Виджет кнопки Tkinter

Этот виджет можно использовать для создания различных типов кнопок.

У нас могут быть кнопки, содержащие не только текст, но и изображения!

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

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

button = tk.Button(master, text, command)

Здесь text – это текст на кнопке, а command относится к функции обратного вызова, которая вызывается при нажатии кнопки.

Давайте теперь сделаем простое приложение, имеющее кнопку, которая при нажатии отображает окно предупреждения, которое сообщает нам, что оно было нажато!

Приведенный ниже фрагмент кода показывает это, с комментариями, объясняющими каждую строку кода.

import tkinter as tk
from tkinter import messagebox

# Create the master object
master = tk.Tk()

# Sets the window size as "300x300"
master.geometry("300x300")

# This is the button callback function
# This must be visible to the button, so we must define it before the button widget!
def buttonCallback():
    messagebox.showinfo("Message", "You have clicked the Button!")

# Create a Button widget
button = tk.Button(master, text="Click", command=buttonCallback)

# And a label for it
label_1 = tk.Label(master, text="Simple Button")

# Use the grid geometry manager to put the widgets in the respective position
label_1.grid(row=0, column=0)
button.grid(row=1, column=0)

# The application mainloop
tk.mainloop()

Теперь, запустив эту программу, вы получите следующий результат.

Пример кнопки 1 2

Теперь, если вы хотите, чтобы изображение шло вместе с вашей кнопкой, чтобы сделать его немного более причудливым, это возможно!

Просто добавьте еще один аргумент ключевого слова в tk.Button() call, called image ! Это ImageTk.PhotoImage , экземпляр которого необходимо создать с помощью файла изображения.

Чтобы использовать ImageTk , мы должны импортировать его из модуля PIL . Сначала мы создаем изображение PIL , изменяем его размер так, чтобы оно было достаточно маленьким, а затем из вашего фотоизображения .

from PIL import Image, ImageTk

# Create a tk.PhotoImage
my_image = Image.open("path/to/image.png")
# Resize it to fit button dimensions
my_image = my_image.resize((25, 25), Image.ANTIALIAS)

Теперь мы готовы сформировать объект фотоизображения.

my_image = Imagetk.PhotoImage(my_image)

Теперь, наконец, мы можем добавить его в нашу кнопку!

b = Button(compound=LEFT, image=my_image, text="Button")

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

Чтобы избежать этого, используйте аргумент ключевого слова compound . Это значение может быть установлено в tk.ЦЕНТР , тк.СЛЕВА , тк.СПРАВА , тк.СВЕРХУ или т. К. СНИЗУ . Это определит ориентацию текста по отношению к изображению.

Поскольку мы поместим текст поверх изображения, мы будем использовать tk.TOP

b = Button(compound=LEFT, image=my_image, text="Button", compound=tk.TOP)

Я покажу вам полный код ниже:

import tkinter as tk
from tkinter import messagebox
from PIL import Image, ImageTk

# Create the master object
master = tk.Tk()

# Sets the window size as "300x300"
master.geometry("300x300")

# This is the button callback function
# This must be visible to the button, so we must define it before the button widget!
def buttonCallback():
    messagebox.showinfo("Message", "You have clicked the Button!")

# Create a tk.PhotoImage
my_image = Image.open("debian.png")
# Resize it to fit button dimensions
my_image = my_image.resize((25, 25), Image.ANTIALIAS)
# Finally, get the PhotoImage object
my_image = ImageTk.PhotoImage(my_image)

# Create a Button widget
button = tk.Button(master, text="Click", image=my_image, command=buttonCallback, compound=tk.TOP)

# And a label for it
label_1 = tk.Label(master, text="Simple Button")

# Use the grid geometry manager to put the widgets in the respective position
label_1.grid(row=0, column=0)
button.grid(row=1, column=0)

# The application mainloop
tk.mainloop()

Выход

Кнопка Пример 2

Вывод

Надеюсь, вы также смогли создать свой собственный виджет кнопок Tkinter. В следующих уроках мы больше сосредоточимся на некоторых виджетах, так что следите за обновлениями!