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 әдісін
қолданбаймыз. Бұл жағдайда бізге бұл қажет емес, өйткені тиісті радио батырмасын басқан
кезде белгінің түсі өзгереді және айнымалы мәніне байланысты болмайды. Осыған
қарамастан, радио батырмаларының параметрлерінде
айнымалыны пайдалану қажет,
өйткені ол оларды бір топқа байланыстыруды және екіншісін қосқан кезде бірін өшіруді
қамтамасыз етеді.
Достарыңызбен бөлісу: