Tkinter Python-д а gui бағдарламалау



Pdf көрінісі
бет15/16
Дата04.10.2024
өлшемі1,32 Mb.
#146854
1   ...   8   9   10   11   12   13   14   15   16
Байланысты:
Tkinter. Python-да GUI бағдарламалау

Практикалық жұмыс 
Бағдарламаны келесі сипаттама бойынша жазыңыз. Бір жолды мәтін жолағында Enter 
пернесін басу мәтінді одан тізімге ауыстыруға әкеледі (Listbox экземпляры). Тізімнің 
элементі-жолында (  ) екі рет басқанда, ол мәтіндік өріске көшірілуі тиіс. 
Сабақ 8. Оқиғалар
Әдетте, графикалық интерфейсі бар қосымшаның бірдеңе жасауы үшін белгілі бір 
оқиғалар орын алуы керек, көбінесе адамның GUI элементтеріне әсері. 


36 
Оқиғалардың үш негізгі түрін бөлуге болады: тінтуір шығаратын, пернетақтадағы 
пернелерді басу, сонымен қатар виджеттердің өзгеруі нәтижесінде пайда болатын оқиғалар. 
Комбинациялар жиі өңделеді. Мысалы, пернетақтадағы пернесі бар тінтуірді шерту. 
Оқиғалар түрі 
Bind әдісін шақырған кезде оқиға бірінші аргумент ретінде беріледі. 
Оқиғаның атауы тырнақшада, сондай-ақ бұрыштық жақшаларда < және > болады. 
Оқиғалар сақталған кілттік сөздер арқылы сипатталады. 
Жиі қолданылатын тінтуір арқылы орындалатын оқиғалар: 

 - тінтуірдің сол жақ батырмасымен басыңыз 

 - тінтуірдің ортаңғы батырмасын басыңыз 

 - тінтуірдің оң жақ батырмасымен басыңыз

 - тінтуірдің сол жақ батырмасымен екі рет басыңыз 

 - тінтуірдің қозғалысы 

және т.б. 
Мысалы: 
from tkinter import * 
def b1(event): 
root.title("Левая кнопка мыши") 
def b3(event): 
root.title("Правая кнопка мыши") 
def move(event): 
x = event.x 
y = event.y 
s = "Движение мышью {}x{}".format(x, y) 
root.title(s) 
root = Tk() 
root.minsize(width=500, height=400) 
root.bind('', b1) 
root.bind('', b3) 


37 
root.bind('', move) 
root.mainloop() 
Бұл бағдарламада тінтуірдің қозғалуына байланысты негізгі терезенің тақырыбындағы 
жазба өзгереді, сол немесе оң жақ батырманы шертіңіз. 
Оқиға (Event ) – tkinter объектілерінің бірі . Оқиғалардың көптеген басқа объектілер 
сияқты атрибуттары бар. Move функциясындағы мысалда 
event
объектісінің х және y 
атрибуттарының мәндері алынады, онда оқиға жасалған виджет ішінде тінтуір курсорының 
орналасқан жерінің координаттары сақталады. Бұл жағдайда виджет-негізгі терезе, ал оқиға 
– , яғни тінтуірдің қозғалысы. 
Бағдарламада төменде Event данасы және оның кейбір қасиеттері туралы ақпарат 
көрсетіледі. Барлық атрибуттарды dir(event) командасы арқылы көруге болады. Әр түрлі 
оқиғаларда олар бірдей, тек мәндері өзгереді. Белгілі бір оқиғалар үшін атрибуттардың бір 
бөлігінің мағынасы жоқ, мұндай қасиеттер әдепкі мәндерге ие. 
Мысалда пернетақта пернесін басу оқиғасы өңделсе де, тінтуір курсорының 
экранындағы ережелер координаттары x, y, x_root, y_root өрістерінде сақталады. 
from tkinter import * 
def event_info(event): 
print(type(event)) 
print(event) 
print(event.time) 
print(event.x_root) 
print(event.y_root) 
root = Tk() 
root.bind('a', event_info) 
root.mainloop() 
Бағдарламаның орындалу үлгісі: 
 
 
8379853 
37 
92 
Пернетақтадағы оқиғалар үшін әріптік пернелерді бұрыштық жақшаларсыз жазуға 
болады (мысалы, 'a').
Альфавиттік емес пернелер үшін арнайы сақталған сөздер бар. Мысалы,
Enter пернесін басу,  - бос орын. Enter пернесін басуға қатысы жоқ  оқиғасы 
бар екенін ескеріңіз, бірақ меңзер виджет шегіне жеткенде пайда болады. 
Бағдарламаны қарастырайық: 


38 
from tkinter import * 
def enter_leave(event): 
if event.type == '7': 
event.widget['text'] = 'In' 
elif event.type == '8': 
event.widget['text'] = 'Out' 
root = Tk() 
lab1 = Label(width=20, height=3, bg='white') 
lab1.pack() 
lab1.bind('', enter_leave) 
lab1.bind('', enter_leave) 
lab2 = Label(width=20, height=3, bg='black', 
fg='white') 
lab2.pack() 
lab2.bind('', enter_leave) 
lab2.bind('', enter_leave) 
root.mainloop() 
Онда екі белгі бірдей функцияны қолданады және әр белгі осы функцияны екі түрлі 
оқиғаны өңдеу үшін қолданады: меңзерді виджет шегіне енгізу және шекараларға шығару. 
Функция оқиға қай виджетке бекітілгеніне байланысты тек осы виджеттің қасиеттерін 
өзгертеді. Қалай өзгеретіні оқиғаға байланысты. 
event.widget қасиеті оқиғаны жасаған виджетке сілтемені қамтиды. event.type қасиеті 
қандай оқиға болғанын сипаттайды. Әр оқиғаның аты мен нөмірі бар. Print (repr (event.type)) 
өрнегі оның толық сипаттамасын көруге мүмкіндік береді. Бұл ретте бір платформаларда 
str (event.type) оқиға атауын қайтарады (мысалы, 'Enter'), басқаларында – оқиға нөмірінің 
жол көрінісін (мысалы, '7') қайтарады. 
Пернетақта оқиғаларына оралатын болсақ. Пернелер тіркесімдері сызықша арқылы 
жазылады. Егер модификатор қолданылатын жағдай болса, ол бірінші, бөлшектер үшінші 
орында көрсетіледі. Мысалы, - Shift пернелері мен жоғары көрсеткілерді бір 
уақытта басу,  - Ctrl пернесі және сол жақ батырмасымен басылған 
тінтуірдің қозғалысы. 
from tkinter import * 
def exit_win(event): 
root.destroy() 


39 
def to_label(event): 
t = ent.get() 
lbl.configure(text=t) 
def select_all(event): 
def select_all2(widget): 
widget.selection_range(0, END) 
widget.icursor(END) # курсор в конец 
root.after(10, select_all2, event.widget) 
root = Tk() 
ent = Entry(width=40) 
ent.focus_set() 
ent.pack() 
lbl = Label(height=3, fg='orange', 
bg='darkgreen', font="Verdana 24") 
lbl.pack(fill=X) 
ent.bind('', to_label) 
ent.bind('', select_all) 
root.bind('', exit_win) 
root.mainloop() 
Мұнда Ctrl+A пернелер тіркесімі өрістегі мәтінді ерекшелейді. root.after () параметрісіз 
таңдау жұмыс істемейді. After әдісі екінші аргументте көрсетілген функцияны бірінші 
аргументте көрсетілген уақыт аралығында орындайды. Үшінші дәлелде 
event 
объектісінің 
widget атрибутының мәні беріледі. Бұл жағдайда олар 
ent 
өрісі болады. Ол 
select_all2
функциясына аргумент ретінде жіберіледі және widget параметріне тағайындалады. 


Достарыңызбен бөлісу:
1   ...   8   9   10   11   12   13   14   15   16




©emirsaba.org 2024
әкімшілігінің қараңыз

    Басты бет