Checkbutton - кнопка-флажок
В Tkinter при помощи виджета Checkbutton создаются флажки.
Экземпляры Checkbutton также могут быть визуально оформлены в группу, но каждый флажок независим от остальных. Каждый может быть в состоянии «установлен» или «снят», независимо от состояний других флажков. Другими словами, в группе Checkbutton можно сделать множественный выбор, в группе Radiobutton – нет.
Флажки не требуют установки между собой связи, поэтому может возникнуть вопрос, а нужны ли тут переменные Tkinter? Они нужны, чтобы снимать сведения о состоянии флажков. По значению связанной с Checkbutton переменной можно определить, установлен ли флажок или снят, что в свою очередь повлияет на ход выполнения программы.
У каждого флажка должна быть своя переменная Tkinter:
from tkinter import *
from tkinter.ttk import *
root = Tk()
ch_var1 = BooleanVar()
ch_var1.set(0)
Checkbutton(text="First", variable=ch_var1, onvalue=1, offvalue=0).pack(anchor=W)
ch_var2 = BooleanVar()
ch_var2.set(0)
Checkbutton(text="Second", variable=ch_var2, onvalue=1, offvalue=0).pack(anchor=W)
root.mainloop()
2
3
4
5
6
7
8
9
10
11
12
13
14
Результат выполнения кода:
С помощью опции onvalue устанавливается значение, которое принимает связанная переменная при включенном флажке. С помощью свойства offvalue – при выключенном. В данном случае оба флажка будут выключены, так как методом set() были установлены соответствующие этому значения.
Checkbutton - является кнопкой, поэтому поддерживает опцию command для вызова функции. Реализуем вызов функции с выводом результата выбора флажков в консоль:
from tkinter import *
from tkinter.ttk import *
def print_value():
print("First: {}".format(ch_var1.get()))
print("Second: {}".format(ch_var2.get()))
root = Tk()
ch_var1 = BooleanVar()
ch_var1.set(0)
Checkbutton(text="First", variable=ch_var1, onvalue=1, offvalue=0, command=print_value).pack(anchor=W)
ch_var2 = BooleanVar()
ch_var2.set(0)
Checkbutton(text="Second", variable=ch_var2, onvalue=1, offvalue=0, command=print_value).pack(anchor=W)
root.mainloop()
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Вариант вывода в консоль:
First: False
Second: True
2
Типы переменных для флажков могут разных типов: BooleanVar(), IntVar() и StringVar():
from tkinter import *
from tkinter.ttk import *
def print_value():
print("First: {}".format(ch_var1.get()))
print("Second: {}".format(ch_var2.get()))
print("Third: {}".format(ch_var3.get()))
root = Tk()
ch_var1 = BooleanVar()
ch_var1.set(0)
Checkbutton(text="First", variable=ch_var1, onvalue=1, offvalue=0, command=print_value).pack(anchor=W)
ch_var2 = IntVar()
ch_var2.set(0)
Checkbutton(text="Second", variable=ch_var2, onvalue=5, offvalue=-5, command=print_value).pack(anchor=W)
ch_var3 = StringVar()
ch_var3.set("")
Checkbutton(text="Third", variable=ch_var3, onvalue="выбран", offvalue="не выбран", command=print_value).pack(anchor=W)
root.mainloop()
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Вариант вывода в консоль:
First: False
Second: 5
Third: не выбран
2
3
Упражнения
Напишите программу тест, выдержав стилистику расположения виджетов. Надписи для копирования:
- "11, для строчного типа данных"
- "5, цена с надбавкой для рыночной экономики"
- "10, для чисел двоичной системы счисления"
- "2, для чисел троичной системы счисления и выше"
- "Выберите ответы, которые считаете верными"
При выборе 1, 3 и 4 вариантов выводиться "Верно!":
При выборе не всех правильных ответов выводиться "ответ не полный":
В комбинациях ответов в которых указан второй (неверный) вариант выводиться "ошибка":
Напишите программу с флажками выбора 5 цветов и кнопкой "Print" в левом фрейме. Текстовым полем справа. При нажатии на кнопку в текстовое поле выводятся выбранные цвета, если ни один цвет не выбран, выводиться: "Please choose the color"
Воспользовавшись оператором
if-elif-else
реализуйте корректное отображение через ',' и оканчивающееся на '.' Для получения длинны содержимого тестового текстового поля можно использовать команду:len(txt.get(1.0, END))
1Напишите программу по теме анекдота:
Идет урок математики в грузинской школе. Учитель спрашивает у детей: - Дэты, сколко будэт 2+2? ученик 1: - 3! учитель: - нет. ученик 2: - 5! учитель: - нет. ученик 3: - 4! учитель: - нет. ученик 4: - 7! учитель: - Верно! ... сэмь, восэм, но не больше дэвяти.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19Пример начальной формы теста:
Внимательно пропишите логику проверку ответов. Правильный вариант ответа, только при выборе своей версии и вводе 7 или 8:
Остальные версии ответов должны выдавать ответ "не правильно":