Переключатели без переменных

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

Строго говоря, в этом примере мы могли бы обойтись и без переменных tkinter. В примере 8.27 также реализована модель с одним выбором, но без переменных, — путем выбора и сброса элементов в группе вручную, в обработчике события. При каждом событии щелчка на переключателе вызывается метод deselect для всех объектов в группе и метод select для того переключателя, на котором был выполнен щелчок.

Пример 8.27. PP4E\Gui\Tour\demo-radio-manual.py

переключатели, сложный способ (без переменных)

обратите внимание, что метод deselect переключателя просто устанавливает пустую строку в качестве его значения, поэтому нам по-прежнему требуется присвоить переключателям уникальные значения или использовать флажки;

from tkinter import * state = ‘’ buttons = []

def onPress(i): global state state = i for btn in buttons:

btn.deselect() buttons[i].select()

root = Tk()

for i in range(10):

rad = Radiobutton(root, text=str(i),

value=str(i), command=(lambda i=i: onPress(i)) ) rad.pack(side=LEFT) buttons.append(rad)

onPress(0) # первоначально выбрать первый переключатель

root.mainloop()

print(state) # вывести информацию о состоянии перед выходом

Этот сценарий создает такое же окно с 10 переключателями, как на рис. 8.29, но реализует интерфейс с единственным выбором, причем текущее состояние хранится в глобальной переменной Python, значение которой выводится при завершении сценария. Все это библиотека tkinter может сделать вместо вас, если использовать связанную переменную tkinter и уникальные значения, как показано в примере 8.28.

Пример 8.28. PP4E\Gui\Tour\demo-radio-auto.py

#  переключатели, простой способ

from tkinter import *

root = Tk() # IntVar также можно использовать

var = IntVar(0) # выбрать 0-й переключатель при запуске

for i in range(10):

rad = Radiobutton(root, text=str(i), value=i, variable=var) rad.pack(side=LEFT)

root.mainloop()

print(var.get()) # вывести информацию о состоянии перед выходом

Этот сценарий действует точно так же, но вводить и отлаживать его значительно проще. Обратите внимание, что в этом сценарии переключатели связываются с переменной типа IntVar, целочисленным собратом StringVar, которая инициализируется нулевым значением (которое также является значением по умолчанию) — если значения переключателей уникальны, можно также пользоваться и целыми числами.

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

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