Перемикачі та прапорці

Для взаємодії з прикладною програмою користувачеві можна не лише надати можливість уводити інформацію з клавіатури, а й обирати певні варіанти із запропонованих, використовуючи перемикачі або прапорці.

Перемикачі

Почнемо із перемикачів, їх ще називають радіоточками. Так, як перемикачі слугують для вибору одного варіанта серед запропонованих, то вони представляються групою, в якій активним може бути тільки один перемикач. Якщо перемикач обрано, то всередині нього з'являється позначка.

Перемикачі використовують, коли користувач має обрати лише один варіант із набору запропонованих. 

Так, ці елементи керування доцільно використовувати для створення тестів, опитувань тощо. 

Але їх створити трішки складніше, ніж будь-який об’єкт, який ми створювали раніше. Просто перемикач — це не єдиний об’єкт, а група об’єктів, тому спочатку створюється група перемикачів, а потім самі перемикачі за допомогою функції Radiobutton()


Приклад:

rb=Radiobutton(text="Перший перемикач")

rb.place(x=100,y=100)

Властивості об’єкта «перемикач»

Об’єкт Radiobutton створюється викликом класу Radiobutton модуля tkinter. 


Об’єкт радіокнопка має властивості (можна використовувати не всі):

w —назва вікна розташування;

text — текст напису;

variable вказує на змінну (IntVar або StringVar), яку треба пов'язати з радіокнопкою. Значення цієї змінної буде змінюватися відповідно до вибраної опції;

value вказує значення, яке буде присвоєно змінній, коли обрана ця радіокнопка;

bg — колір фону (скорочено від background),

fg — колір напису (скорочено від foreground);

font — шрифт і його розмір.

command вказує функцію, яка буде викликана, коли радіокнопка буде натискана.


! Аргументи variable, value та text є обов’язковими, без них перемикачі не будуть представляти із себе нічого. Кожен перемикач потрібно розмістити за допомогою методу place().


ім'я_групи перемикачів=IntVar()

назва_ перемикача1= Radiobutton(назва_вікна, text=”Текст перемикача1”, variable= ім'я_групи_перемикачів, value=значення перемикача1)

назва_перемикача1= Radiobutton(назва_вікна, text=”Текст перемикача2”, variable= ім'я_групи_перемикачів, value=значення перемикача2)


ім'я групи перемикачів – це цілочисельна (lntVar) змінна із результатом вибору користувача програми.

IntVar - це клас в бібліотеці Tkinter у Python, який використовується для створення цілочисельних змінних, які можна пов'язати з віджетами, такими як перемикачі Checkbutton або Radiobutton.

Основне використання IntVar полягає в тому, щоб визначити цілочисельну змінну, яка може служити маяком для відслідковування та оновлення стану віджетів у реальному часі.

value — значення перемикача, яке буде набувати група перемикачів в залежності від вибору користувача. Зазвичай значення перемикача – це натуральні числа, починаючи від 1, хоча ви можете встановити і інші. Та головне щоб для всіх перемикачів вони були різними.


! Якщо потрібно отримати дані про те, який перемикач увімкнутий, використовують метод get(), щоб надати значення — метод set().


Приклад:

Для прикладу створимо вікно із розмірами 400x400, та створимо в нього групу перемикачів, а саме три перемикачі із варіантами кольорів (жовтий, рожевий та світло зелений). І перший розмістимо в 100 пікселях від лівого краю та в 200 пікселях від верхнього краю, а кожен наступний на 20 пікселів нижче. Програмний код буде виглядати так: 

from tkinter import *

#  створення функції зміни кольору вікна

def ch_color():

    if perem.get()==1:

        Window.configure(bg="yellow")

    elif perem.get()==2:

        Window.configure(bg="pink")

    elif perem.get()==3:

        Window.configure(bg="lightgreen")

#  створення вікна

Window=Tk()

Window.geometry("400x400") 

#  створення групи перемикачів perem

perem=IntVar()

#  створення та розміщення першого перемикача perem1 

perem1=Radiobutton(Window, text="Жовтий", variable=perem, value=1, command=ch_color) 

perem1.place(x=100, y=200)

#  створення та розміщення першого перемикача perem2 

perem2=Radiobutton(Window, text="Рожевий", variable=perem, value=2, command=ch_color)

perem2.place(x=100, y=220)

#  створення та розміщення першого перемикача perem3 

perem3=Radiobutton(Window, text="Світло зелений", variable=perem, value=3, command=ch_color)

perem3.place(x=100, y=240)

Window.mainloop()

ЗАВДАННЯ ДЛЯ САМОСТІЙНОЇ РОБОТИ №1 - виконати зміну коду:

ДОМАШНЯ РОБОТА:

1. Підручник стор. 170-172.

2. Виконати завдання для самостійної роботи №1 і надіслати на пошту вчителя email:  voronenko@54.edu.ks.ua 

Прапорці

Що стосується прапорців, то ці елементи управління не об’єднуються в трупи, тому, що активних прапорців може бути не обмежена кількість. Виглядають вони у неактивному стані i в активному стані по різному:

Прапорці слугують для вибору декількох варіантів і тому кожен прапорець має свою змінну із значенням.

Для створення прапорців призначена функція Checkbutton(), і застосовується вона так:

назва_змінної=IntVar()

ім’я_прапорця= Checkbutton(назва_вікна, text=“Teкст прапорця", vаriable=назва_змінної, onvalue=значення_коли_прапорець_ввікнутий, ofvalue=значення_коли_прапорець_вимкнутий)

Зазвичай в якості значення прапорця встановлюють 1 та 0 (в активному та неактивному стані), але вибір все одно залишається за автором програми.

Для прикладу візьмемо вікно з розмірами 500х500 пікселів та створимо напис із початковим текстом "Не вибрано". Також створимо чотири прапорці (перші два із варіантами кольорів та інші двоє із варіантами типів фарб). В залежності від нашого вибору текст напису буде змінюватися (у якості прикладу розглянемо лише 2 комбінації). Щоб реалізувати зміну тексту напису створимо подію Button-l для напису.

from tkinter import *

def newtext(event):

if prap1.get()==1 and prap4.get()==1:

    label["text"]="Ви вибрали жовту гуаш"

elif prap2.get()==1 and prap3.get()==1:

    label["text"]="Ви вибрали зелену акварель"

window=Tk()

window.geometry("400x400")

label=Label(window, text="Не вибрано")

label.place(x=100, y=50)

prap1=IntVar()

prap2=IntVar()

prap3=IntVar()

prap4=IntVar()

prapor1=Checkbutton(window, text="Жовтий", variable=prap1, onvalue=1, offvalue=0)

prapor1.place(x=100, y=100)

prapor2=Checkbutton(window, text="Зелений", variable=prap2, onvalue=1, offvalue=0)

prapor2.place(x=100, y=120)

prapor3=Checkbutton(window, text="Акварель", variable=prap3, onvalue=1, offvalue=0)

prapor3.place(x=100, y=160)

prapor4=Checkbutton(window, text="Гуаш", variable=prap4, onvalue=1, offvalue=0)

prapor4.place(x=100, y=180)

label.bind("<Button-1>",newtext)

window.mainloop()


Детальний аналіз рядка label.bind("<Button-1>", newtext)

Цей рядок коду відповідає за прив'язку функції newtext до події кліку лівою кнопкою миші на елементі label. Давайте розберемо його покроково:

Загалом, цей рядок коду забезпечує інтерактивність програми. Користувач може взаємодіяти з вікном, натискаючи ліву кнопку миші на елементі label, що призводить до виконання функції newtext. Функція newtext перевіряє стан прапорців та оновлює текст елемента label відповідно до вибору користувача.

ЗАВДАННЯ ДЛЯ САМОСТІЙНОЇ РОБОТИ №2 - виконати зміну коду:

ДОМАШНЯ РОБОТА:

1. Підручник стор. 168-175.

2. Виконати завдання для самостійної роботи №2 і надіслати на пошту вчителя email:  voronenko@54.edu.ks.ua