Библиотека Tkinter: Обработка переключателей.

Библиотека Tkinter содержит специальные классы, объекты которых выполняют роль переменных для хранения значений о состоянии различных виджетов.

Как и говорилось в статье “Библиотека Tkinter: Виджеты“, от класса Radiobutton создаются радио-кнопки, от класса Checkbutton – флажки.

Обработка зависимых переключателей

Изменение значения такой переменной ведет к изменению и свойства виджета, и наоборот: изменение свойства виджета изменяет значение ассоциированной переменной.

Существует несколько таких классов Tkinter, предназначенных для обработки данных разных типов:

StringVar() - для строк;
IntVar - целых чисел;
DoubleVar() - дробных чисел;
Booleanvar() - для обработки булевых значений (true и false).

Рассмотрим пример:

r_var = BooleanVar()
r_var.set(0)
r1 = Radiobutton(text='First', variable=r_var, value=0)
r2 = Radiobutton(text='Second', variable=r_var, value=1)

Здесь переменной r_var присваивается объект типа BooleanVar. С помощью метода set() он устанавливается в значение 0.

При запуске программы включенной окажется первая радио-кнопка, так как значение ее опции value совпадает с текущим значением переменной r_var. Если кликнуть по второй радио-кнопке, то она включится, а первая выключится. При этом значение r_var станет равным 1.

Пример работы программы с радио-кнопками:

from tkinter import *

def sel():
  selection = "Вы выбрали " + str(var.get())
  label.config(text = selection)
    
root = Tk()
root.title("Пример работы радио-кнопок")
root.minsize(width=500, height=400)

# создаем радио-кнопки используя переменную-объект типа IntVar()
var = IntVar()
R1 = Radiobutton(root, text="Windows", variable=var, value=1, command=sel)
R1.pack( anchor = W )

R2 = Radiobutton(root, text="Linux", variable=var, value=2, command=sel)
R2.pack( anchor = W )

R3 = Radiobutton(root, text="MacOS", variable=var, value=3, command=sel)
R3.pack( anchor = W )

label = Label(root)
label.pack()

# запускаем программу
root.mainloop()

В данной программе мы сначала создаем радио-кнопки, а затем назначаем команду sel для каждой радио-кнопки. При выборе той или иной кнопки передается значение, указанное в value. Вывод программы:


Библиотека Tkinter: Обработка переключателей.

Обработка независимых переключателей

Флажки не требуют установки между собой связи, поэтому может возникнуть вопрос, а нужны ли тут переменные Tkinter?

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

Поскольку состояния флажков независимы друг от друга, то для каждого должна быть введена собственная ассоциированная переменная-объект. Рассмотрим пример программы с флажками:

from tkinter import *
    
root = Tk()
root.title("Пример работы флажков")
root.minsize(width=500, height=400)

var0 = StringVar() # значение каждого флажка
var1 = StringVar() # хранится в собственной переменной
var2 = StringVar()

# если флажок установлен, то в ассоциированную переменную
# (var0, var1 или var2) заносится значение onvalue,
# если флажок снят, то - offvalue.

ch0 = Checkbutton(root, text="Windows", variable=var0, onvalue="Выбран Windows", offvalue="-")
ch1 = Checkbutton(root, text="Linux", variable=var1, onvalue="Выбран Linux", offvalue="-")
ch2 = Checkbutton(root, text="MacOS", variable=var2, onvalue="Выбран MacOS", offvalue="-")

lis = Listbox(root, height=3)
def result(event):
  v0 = var0.get()
  v1 = var1.get()
  v2 = var2.get()
  l = [v0, v1, v2] # значение переменных заносится в список
  lis.delete(0,2)  # предыдущее значение удаляется из Listbox
  
  for v in l:      # содержимое списка l последовательно
    lis.insert(END,v) # вставляется в Listbox
    
but = Button(root, text="Получить значения")
but.bind('<Button-1>', result)

ch0.deselect() # по умолчанию флажки сняты
ch1.deselect()
ch2.deselect()

ch0.pack()
ch1.pack()
ch2.pack()
but.pack()
lis.pack()

# запускаем программу
root.mainloop()

Вывод программы:


Библиотека Tkinter: Обработка переключателей.

С помощью методов select() и deselect() флажков можно их программно включать и выключать. То же самое относится к радио-кнопкам.

На этом мы завершаем нашу статью. Желаем Вам хорошего и чистого кода! Пишите в комментариях свои вопросы и примеры кода.

 
Поделиться в facebook
Facebook
Поделиться в twitter
Twitter
Поделиться в vk
VK
Поделиться в google
Google+
Поделиться в email
Email

Один ответ к “Библиотека Tkinter: Обработка переключателей.”

Добавить комментарий

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

Группа в VK

Помощь проекту

Обнаружили опечатку?

Сообщите нам об этом, выделите текст с ошибкой и нажмите Ctrl+Enter, будем очень признательны!

Свежие статьи

Похожие статьи

Библиотека Tkinter: ttk.

Библиотека Tkinter: ttk.

ttk (themed tk) – это расширение tcl/tk с новым набором виджетов. В ttk используется новый движок для создания виджетов. Этот движок обладает поддержкой тем и

 
Библиотека Tkinter: Изображения.

Библиотека Tkinter: Изображения.

Для работы с изображениями в Tkinter имеется два класса BitmapImage и PhotoImage. BitmapImage представляет собой простое двухцветное изображение, PhotoImage – полноцветное изображение. BitmapImage Конструктор класса

 
Библиотека Tkinter: Упаковщики.

Библиотека Tkinter: Упаковщики.

Упаковщик (менеджер геометрии, менеджер расположения) это специальный механизм, который размещает (упаковывает) виджеты на окне. В Tkinter есть три упаковщика: pack, place, grid. В одном виджете

 
Библиотека Tkinter: Методы виджетов.

Библиотека Tkinter: Методы виджетов.

Все виджеты в Tkinter обладают некоторыми общими методами. В этой статье мы познакомимся с такими методами. Список всех виджетов можно изучить в статье “Библиотека Tkinter:

 

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: