Шаг 40.
Библиотека Tkinter. Компоненты и вспомогательные классы. Стилизуемые компоненты. Компонент Radiobutton: переключатель
На этом шаге мы рассмотрим назначение, свойства и пример использования этого виджета.
Компонент переключателя представлен классом Radiobutton. Набор поддерживаемых им опций схож с таковым у флажка:
- variable - задает метапеременную, хранящую определенное в свойстве value значение. Метапеременная может быть любого типа. Все переключатели, входящие в одну группу, должны быть связаны с одной метапеременной;
- value - задает значение, которое будет заноситься в связанную метапеременную в случае, если текущий переключатель установлен;
- text - указывает текст надписи для переключателя;
- textvariable - указывает метапеременную, хранящую значение, которое будет использовано в качестве надписи. Метапеременная может быть любого типа;
- underline - задает номер символа в надписи, который следует сделать подчеркнутым. Нумерация символов начинается с 0. Если в качестве значения опции указано отрицательное число,
ни один символ надписи не будет подчеркнут;
- image - указывает изображение, которое будет выводиться в составе надписи вместе с текстом или вместо него (это зависит от значения опции compound). Изображение задается
в виде экземпляра класса PhotoImage или imageTk.PhotoImage из библиотеки Pillow;
- compound - указывает месторасположение изображения относительно текста. Доступны значения:
- tkinter.LEFT - изображение находится слева от текста,
- tkinter.TOP - сверху,
- tkinter.RIGHT - справа,
- tkinter.BOTTOM - снизу и
- None - выводится только изображение (поведение по умолчанию).
Эту опцию имеет смысл указывать лишь в случае задания для флажка изображения;
- width - указывает ширину переключателя в виде целого числа в символах. Положительное значение задаст фиксированную ширину, отрицательное - минимальную;
- command - задает функцию (метод), которая будет выполнена после изменения состояния переключателя.
Опции, задаваемые только посредством стилей:
- foreground - цвет текста;
- background - цвет фона;
- font - шрифт для текста надписи;
- highlightcolor - цвет выделения, обозначающего, что компонент имеет фокус ввода;
- highlightthickness - толщина рамки выделения, обозначающего, что компонент имеет фокус ввода;
- relief - стиль рамки вокруг флажка. Доступны значения:
- tkinter.FLAT - рамка отсутствует (поведение по умолчанию),
- tkinter.RAISED - возвышение,
- tkinter.SUNKEN - углубление,
- tkinter.RIDGE - бортик и
- tkinter.GROOVE - желоб;
- borderwidth - толщина рамки вокруг переключателя в виде целого числа в пикселях;
- anchor - выравнивание текста надписи в виде якоря. Эту опцию имеет смысл указывать только в том случае, если ширина надписи меньше ширины компонента;
- justify - выравнивание отдельных строк текста надписи. Доступны значения:
- tkinter.LEFT - выравнивание по левому краю (поведение по умолчанию),
- tkinter.CENTER - по середине и
- tkinter.RIGHT - по правому краю.
Указывать эту опцию имеет смысл только в том случае, если текст надписи разбит на отдельные строки символами \n;
- wraplength - максимальная ширина строки в виде дистанции библиотеки Tkinter. В результате текст надписи будет автоматически разбит на строки, ширина которых не
превышает указанной в опции. Если указать значение None, текст не будет разбиваться на строки (поведение по умолчанию).
Класс Radiobutton поддерживает метод invoke(), который при вызове изменяет состояние переключателя - со сброшенного на установленное или наоборот.
Вот пример кода, создающего группу из трех переключателей:
import tkinter
import tkinter.ttk
class Application(tkinter.ttk.Frame):
def __init__(self, master=None):
super().__init__(master)
# Обязательно указываем ширину и высоту контейнера посредством
# опций width и height соответственно
self.configure(width=200, height=100)
self.pack(padx=4, pady=4)
self.create_widgets()
self.master.title("Проверка значений")
# Запрещаем изменять размеры окна
self.master.resizable(False, False)
def create_widgets(self):
self.varL = tkinter.StringVar()
self.varL.set("Python")
rdb1 = tkinter.ttk.Radiobutton(self, text="Python", value="Python",
variable=self.varL)
rdb1.pack()
rdb2 = tkinter.ttk.Radiobutton(self, text="PHP", value="PHP",
variable=self.varL)
rdb2.pack()
rdb3 = tkinter.ttk.Radiobutton(self, text="Ruby", value="Ruby",
variable=self.varL)
rdb3.pack()
root = tkinter.Tk()
app = Application(master=root)
root.mainloop()
Архив с файлом можно взять
здесь.
Результат работы приложения приведен на рисунке 1.
Рис.1. Результат работы приложения
На следующем шаге мы рассмотрим виджет Combobox.
Предыдущий шаг
Содержание
Следующий шаг