Файл: Tkinter Pythonд а gui бадарламалау.docx

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 04.02.2024

Просмотров: 29

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.


Get және delete әдістері екі емес, бір аргументті қабылдай алады. Бұл жағдайда көрсетілген позицияда тек бір таңба өңделеді.

Тегтер
TK кітапханасының мәтін өрісінің ерекшелігі-ондағы мәтінді пішімдеу мүмкіндігі, яғни оны әр түрлі бөліктеріне әр түрлі дизайн беру. Бұл tag_add және tag_config әдістері арқылы орындалады. Біріншісі тегті қосады, сонымен қатар оның ерікті атауын және ол қолданылатын мәтін сегментін көрсету керек. Ал tag_config әдісі тег стилін конфигурациялайды.



from tkinter import *

root = Tk()

text = Text(width=50, height=10)

text.pack()

text.insert(1.0, "Hello world!\nline two")

text.tag_add('title', 1.0, '1.end')

text.tag_config('title', justify=CENTER,

font=("Verdana", 24, 'bold'))
root.mainloop()




Виджеттерді мәтін өрісіне кірістіру
Window_create әдісін қолдана отырып, text-ке басқа виджеттерді енгізуге болады. Бұған қажеттілік көп емес, бірақ Canvas сияқты объектімен қызықты болуы мүмкін. Бұл класс кейінірек зерттелетін болады. Төмендегі мысалда меңзердің ағымдағы ( INSERT ) позициясына белгі қойылады.



from tkinter import *
def smile():

label = Label(text=":)", bg="yellow")

text.window_create(INSERT, window=label)
root = Tk()
text = Text(width=50, height=10)

text.pack()
button = Button(text=":)", command=smile)

button.pack()
root.mainloop()




Функцияға белгіні қою функция шақырылған сайын жаңа белгі жасауға мүмкіндік береді. Әйтпесе, егер белгі бағдарламаның негізгі тармағында болса, алдыңғы тармақ жоғалып кетеді.
Практикалық жұмыс
Бір жолды және көп жолды мәтіндік өрістерден және екі "ашу" және "сақтау" батырмаларынан тұратын бағдарламаны жазыңыз. Біріншісін басқан кезде аты Entry класс өрісінде көрсетілген файлды оқу үшін ашылуы керек, ал файл мазмұны Text типті өріске жүктелуі керек. Екінші батырманы басқан кезде пайдаланушы Text данасына енгізген мәтін - пайдаланушы бір жолды мәтін өрісінде көрсеткен файлдың астында сақталуы керек.

Адрессіз файл атауларын көрсетсеңіз, файлдар скрипт файлымен бірдей каталогта оқылады және жазылады.



Практикалық жұмысты орындау үшін сізге Python-ның open функциясы және файлды оқу/жазу нысанының әдістері қажет.

Python туралы білімді осы сілтеме бойынша берілген ақпараттарды игеру арқылы жаңарта аласыз (https://younglinux.info/python/files).


Сабақ 5. Radiobutton және Checkbutton. Tkinter айнымалылары
Tkinter-де Radiobutton класынан радио батырмалар, Checkbutton класынан құсбелгілер құрылады. Радио батырмалары бір-бірден жасалмайды, бірақ қосқыштар қағидаты бойынша жұмыс істейтін байланысқан топ жасайды. Біреуі қосылған кезде басқалары өшіріледі.

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

Бағдарламалық код әдетте екі батырманың қайсысы қосылғаны туралы деректерді "алып тастауды" талап етеді. Бұл 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 *
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()



Кодтың соңғы екі нұсқасында var айнымалысының мәнін алу үшін get әдісін қолданбаймыз. Бұл жағдайда бізге бұл қажет емес, өйткені тиісті радио батырмасын басқан кезде белгінің түсі өзгереді және айнымалы мәніне байланысты болмайды. Осыған қарамастан, радио батырмаларының параметрлерінде айнымалыны пайдалану қажет, өйткені ол оларды бір топқа байланыстыруды және екіншісін қосқан кезде бірін өшіруді қамтамасыз етеді.
Checkbutton - құсбелгі
Құсбелгілер өзара байланысты орнатуды қажет етпейді, сондықтан tkinter айнымалылары қажет пе деген сұрақ туындауы мүмкін? Олар құсбелгілердің жағдайы туралы ақпаратты алу үшін қажет. Checkbutton-мен байланысты айнымалының мәні бойынша құсбелгі қойылғанын немесе жойылғанын анықтауға болады, бұл өз кезегінде бағдарламаның орындалу барысына әсер етеді. Әрбір құсбелгіде өзінің Tkinter айнымалысы болуы керек. Әйтпесе, бір құсбелгі қосулы болса, екіншісі өшіріледі, себебі жалпы tkinter айнымалысының мәні өзгереді және бірінші құсбелгінің onvalue опциясының мәніне тең болмайды.



from tkinter import *

root = Tk()
def show():

s = f'{var1.get()}, ' \

f'{var2.get()}'

lab['text'] = s

frame = Frame()

frame.pack(side=LEFT)

var1 = BooleanVar()

var1.set(0)

c1 = Checkbutton(frame, text="First",

variable=var1,

onvalue=1, offvalue=0,

command=show)

c1.pack(anchor=W, padx=10)
var2 = IntVar()

var2.set(-1)

c2 = Checkbutton(frame, text="Second",

variable=var2,

onvalue=1, offvalue=0,

command=show)

c2.pack(anchor=W, padx=10)

lab = Label(width=25, height=5, bg="lightblue")

lab.pack(side=RIGHT)

root.mainloop()





Onvalue опциясының көмегімен қосылған құсбелгінің айнымалысымен байланысқан мән орнатылады. Ал Offvalue қасиеті- қосылмаған жағдайда . Бұл жағдайда бағдарламаны іске қосқан кезде екі құсбелгі де өшіріледі, өйткені set әдісі арқылы onvalue-ден сәйкес мәндер орнатылды.

Off value опциясын көрсетпеуге болады. Алайда, егер ол болса, құсбелгінің өшірілгенін бақылауға болады. Select және deselect әдістерінің көмегімен құсбелгілерді бағдарламалық түрде қосуға және өшіруге болады. Бұл радио батырмаларына да қатысты.