Radiobutton – радио батырмасы
Егер біз тиісті параметрлерсіз екі радио батырмаларын жасасақ, онда екеуі де қосылып,
оларды өшіру мүмкін болмайды:
Бұл қосқыштардың бір-біріне ешқандай қатысы жоқ. Бұған қоса, оларға «қосулы»
немесе «өшірулі» күйде болу керектігі туралы бастапқы мән берілмейді. Олар әдепкі
бойынша қосылады.
Байланыс жалпы айнымалы арқылы орнатылады, олардың әртүрлі мәндері топтың
әртүрлі радио батырмалардың қосылуына сәйкес келеді. Бір топтың барлық батырмалары
үшін variable қасиеті бірдей айнымалылар тобымен байланысқан мәнге орнатылады. Value
қасиеті осы айнымалыға әртүрлі мәндер береді.
Tkinter-де виджет күйлерін сақтау үшін кез-келген айнымалыны пайдалану мүмкін
емес. Осы мақсаттар үшін арнайы кластар tkinter пакетінің айнымалы мәндері –BooleanVar,
IntVar , DoubleVar , StringVar қарастырылған. Бірінші класс өз даналарына тек логикалық
мәндерді (0 немесе 1 және 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 ге тең
болады.
25
Бағдарламалық код әдетте екі батырманың қайсысы қосылғаны туралы деректерді
"алып тастауды" талап етеді. Бұл tkinter айнымалысы даналарының get әдісі арқылы
жасалады.
from tkinter import *
def change():
if var.get() == 0:
label['bg'] = 'red'
elif var.get() == 1:
label['bg'] = 'green'
elif var.get() == 2:
label['bg'] = 'blue'
root = Tk()
var = IntVar()
var.set(0)
red = Radiobutton(text="Red",
variable=var, value=0)
green = Radiobutton(text="Green",
variable=var, value=1)
blue = Radiobutton(text="Blue",
variable=var, value=2)
button = Button(text="Изменить",
command=change)
label = Label(width=20, height=10)
red.pack()
green.pack()
blue.pack()
button.pack()
label.pack()
root.mainloop()
Change функциясында var айнымалысының санаулы мәніне байланысты
бағдарламаның орындалу барысы үш тармақтың бірінде жүреді.
Change функциясын немесе кез-келген басқа радио батырмаларының command
қасиетімен байланыстыру арқылы біз "өзгерту" батырмасынан құтыла аламыз. Бір топқа
біріктірілген радио батырмалар бірдей функцияны шақыруы міндетті емес.
from tkinter import *
26
def red_label():
label['bg'] = 'red'
def green_label():
label['bg'] = 'green'
def blue_label():
label['bg'] = 'blue'
root = Tk()
var = IntVar()
var.set(0)
Radiobutton(text="Red", command=red_label,
variable=var, value=0).pack()
Radiobutton(text="Green", command=green_label,
variable=var, value=1).pack()
Radiobutton(text="Blue", command=blue_label,
variable=var, value=2).pack()
label = Label(width=20, height=10, bg='red')
label.pack()
root.mainloop()
Мұнда белгі радио батырмаларын басқан кезде түсті өзгертеді. Егер жоғарыдағы
мысалға қарасақ, радио батырманың коды олармен байланысқан функциялардың кодымен
бірдей екенін көруге болады. Мұндай жағдайларда класқа бір типті кодты қою дұрыс
болады.
from tkinter import *
def paint(color):
label['bg'] = color
class RBColor:
def __init__(self, color, val):
Radiobutton(
text=color.capitalize(),
command=lambda i=color: paint(i),
variable=var, value=val).pack()
root = Tk()
var = IntVar()
var.set(0)
RBColor('red', 0)
RBColor('green', 1)
RBColor('blue', 2)
label = Label(width=20, height=10, bg='red')
label.pack()
root.mainloop()
27
Кодтың соңғы екі нұсқасында var айнымалысының мәнін алу үшін get әдісін
қолданбаймыз. Бұл жағдайда бізге бұл қажет емес, өйткені тиісті радио батырмасын басқан
кезде белгінің түсі өзгереді және айнымалы мәніне байланысты болмайды. Осыған
қарамастан, радио батырмаларының параметрлерінде айнымалыны пайдалану қажет,
өйткені ол оларды бір топқа байланыстыруды және екіншісін қосқан кезде бірін өшіруді
қамтамасыз етеді.
Достарыңызбен бөлісу: |