Переключатели

perekljuchateli Экскурсия по tkinter, часть 1

Переключатели (или радиокнопки) обычно используются группами: так же, как для механических кнопок выбора станций в старых радиоприемниках, щелчок на одном виджете Radiobutton из группы автоматически делает невыбранными все кнопки, кроме той, на которой был выполнен последний щелчок. Иными словами, одновременно может быть выбрано не более одного виджета. В tkinter связывание всех переключателей из группы с уникальными значениями с одной и той же переменной гарантирует, что в каждый данный момент времени может быть выбрано не более одного переключателя.

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

атрибут variable для связывания кнопок в группу и получения текущего выбора в произвольный момент времени.

Кроме того, у переключателей есть атрибут value, позволяющий сообщить библиотеке tkinter, какое значение должна иметь ассоциированная переменная, когда выбирается тот или иной переключатель в группе. Поскольку несколько переключателей ассоциируется с одной и той же переменной, каждому переключателю должно соответствовать свое значение (это не просто схема с переключением между 1 и 0). Основы использования переключателей демонстрируются в примере 8.25.

Пример 8.25. PP4E\Gui\Tour\demoRadio.py

“создает группу переключателей, которые вызывают демонстрационные диалоги”

from tkinter import * # импортировать базовый набор виджетов

from dialogTable import demos # обработчики событий

from quitter import Quitter # прикрепить ксебеобъект Quitter

class Demo(Frame):

def __init__(self, parent=None, **options):

Frame.__init__(self, parent, **options) self.pack()

Label(self, text=”Radio demos”).pack(side=TOP) self.var = StringVar() for key in demos:

Radiobutton(self, text=key,

command=self.onPress, variable=self.var, value=key).pack(anchor=NW) self.var.set(key) # при запуске выбрать последний переключатель Button(self, text=’State’, command=self.report).pack(fill=X) Quitter(self).pack(fill=X)

def onPress(self):

pick = self.var.get()

print(‘you pressed’, pick) print(‘result:’, demos[pick]())

def report(self):

print(self.var.get())

if __name__ == ‘__main__’: Demo().mainloop()

На рис. 8.28 изображено окно, которое создается при запуске этого сценария. Щелчок на любом из переключателей в этом окне вызывает обработчик command, запускает один из стандартных диалогов, с которыми мы познакомились выше, и автоматически делает невыбранным переключатель, на котором выполнялся щелчок перед этим. Как и флажки, переключатели здесь также компонуются; в данном сценарии они прикрепляются к верхнему краю, располагаясь по вертикали, а затем выравниваются, прикрепляясь якорями к северо-западному углу отведенного им пространства.

Рис. 8.28. Сценарий demoRadio в действии

 

Как и в примере с флажками, кнопка State служит для запуска метода report класса и вывода информации о текущем состоянии переключателей (выбранного переключателя). В отличие от примера с флажками, в этом сценарии выводятся также значения, возвращаемые диалогами, которые запускаются щелчками на переключателях. Ниже показано, как выглядит поток stdout после нескольких щелчков на переключателях — информация о состоянии выделена полужирным шрифтом:

C:\\PP4E\Gui\Tour> python demoRadio.py you pressed Input result: 3.14

Input

you pressed Open

result: C:/PP4thEd/Examples/PP4E/Gui/Tour/demoRadio.py

Open

you pressed Query result: yes

Query

Использованная литература:
Марк Лутц — Программирование на Python, 4-е издание, I том, 2011

Оцените статью
Секреты программирования
Добавить комментарий