ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 04.02.2024
Просмотров: 28
Скачиваний: 1
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
Insert әдісі мәтінді енгізу керек позицияны және мәтіннің өзін қабылдайды.
Мұндай код:
from tkinter import *
from datetime import datetime as dt
def insert_time():
t = dt.now().time()
e1.insert(0, t.strftime('%H:%M:%S '))
root = Tk()
e1 = Entry(width=50)
but = Button(text="Время",
command=insert_time)
e1.pack()
but.pack()
root.mainloop()
батырманы әр басқаннан кейін өрісте бұрыннан бар жолдың алдында жаңа уақыт енгізілуіне әкеледі.
Егер insert-тегі 0 END тұрақтысына ауыстырылса , онда ол соңына енгізіледі. Индекстен кез-келген санды көрсетуге болады, сонда кірістіру жолдың орталарында орындалады.
Delete әдісі бір немесе екі аргумент қабылдайды. Бірінші жағдайда көрсетілген орында бір таңба жойылады. Екіншісінде, соңғысын қоспағанда, екі көрсетілген индекстің арасындағы кесінді жойылады. Егер өрісті толығымен тазалау қажет болса, онда бірінші аргумент 0, екіншісі - END болуы керек.
Практикалық жұмыс
Кемпірқосақтың түстеріне сәйкес келетін жеті батырмасы бар бағдарлама жазыңыз. Осы немесе басқа батырманы басқан кезде мәтіндік өріске түс коды, ал белгіге түс атауы енгізілуі керек.
Он алтылық кодтаудағы түс кодтары: # ff0000 - қызыл, # ff7d00 - қызғылт сары, # ffff00 - сары, # 00ff00 - жасыл, # 007dff - көгілдір, # 0000ff - көк, # 7d00ff-күлгін.
Шамамен келесідей болуы керек:
Мәтін жолағында сызықты ортасына туралау үшін CENTER мәнімен justify қасиетін пайдаланыңыз.
Сабақ 3. Pack әдісі
GUI виджеттерімен танысуды жалғастырмас бұрын, олардың терезеде орналасуы мәселесіне тоқталайық. Бұл маңызды сұрақ, өйткені бағдарламаның ыңғайлылығы көбінесе интерфейстің ойластырылғандығына байланысты. Кеңістікте виджеттерді ұйымдастыру арқылы бағдарламашы ішінара дизайнер, интерфейс әзірлеушісіне айналады.
Tkinter-де геометрия деп аталатын үш менеджер бар - жинақтаушы, тор және координаттар бойынша орналастыру. Бұл сабақта ең қарапайым және жиі қолданылатыны ретінде біріншісі қарастырылады, қалған екеуіне кейінірек тоқталамыз.
Жинақтаушы (packer) барлық виджет нысандарында болатын pack әдісімен шақырылады. Біз оны алдын пайдаландық. Интерфейс элементіне геометрия менеджерлерінің ешқайсысын қолданбасаңыз, ол терезеде көрсетілмейді. Бұл ретте әртүрлі басқарушыларды бір терезеде (немесе кез келген басқа түбірлік виджетте) біріктіру мүмкін емес. Виджеттерді pack әдісі арқылы орналастыруды бастасаңыз, тор (grid) мен орын (place) әдістерін бірден қолдануға тырыспаңыз.
Егер сіз аргументтерді жинақтаушыға жібермесеңіз, онда виджеттер бір-бірінің үстіне тігінен орналасады. Бірінші шақырылатын pack объекті жоғарғы жағында болады. Екіншісі-біріншінің астында сияқты және т.б.
Pack әдісінің tkinter-дің төрт тұрақты мәнінің - TOP, BOTTOM , LEFT , RIGHT (жоғарғы , төменгі, сол, оң) біреуін алатын side (тарап) параметрі бар. Әдепкі бойынша, pack-те side көрсетілмеген кезде, оның мәні TOP болады . Осыған байланысты виджеттер тігінен орналастырылады.
Боялған төрт белгіні жасаңыз
…
l1 = Label(width=7, height=4, bg='yellow', text="1")
l2 = Label(width=7, height=4, bg='orange', text="2")
l3 = Label(width=7, height=4, bg='lightgreen', text="3")
l4 = Label(width=7, height=4, bg='lightblue', text="4")
…
және side мәндерінің әртүрлі комбинацияларын қарастырыңыз:
Соңғы екі нұсқаның проблемасы-егер сіз виджеттерді квадратқа қоюыңыз керек болса, яғни екі жоғарғы және екі жоғарғының астына тағы екеуін қою қажет болса, оны жасау қиынға соғады. Сондықтан олар көмекші виджетке – frame класынан пайда болатын фреймге (жақтау) жүгінеді .
Жақтаулар негізгі терезеде, ал жақтауларда виджеттер орналастырылған:
from tkinter import *
root = Tk()
f_top = Frame(root)
f_bot = Frame(root)
l1 = Label(f_top, width=7, height=4,
bg='yellow', text="1")
l2 = Label(f_top, width=7, height=4,
bg='orange', text="2")
l3 = Label(f_bot, width=7, height=4,
bg='lightgreen', text="3")
l4 = Label(f_bot, width=7, height=4,
bg='lightblue', text="4")
f_top.pack()
f_bot.pack()
l1.pack(side=LEFT)
l2.pack(side=LEFT)
l3.pack(side=LEFT)
l4.pack(side=LEFT)
root.mainloop()
Нәтиже:
Frame-нен басқа оған ұқсас қолтаңбасы бар жақтау- LabelFrame класы бар. Қарапайым жақтаудан айырмашылығы, оның text қасиеті бар .
…
f_top = LabelFrame(text="Верх")
f_bot = LabelFrame(text="Низ")
…
Side - тан басқа pack-те басқа -қасиеттер параметрі бар. Ішкі ( ipadx және ipady ) және сыртқы (padx және pady ) шегіністерді орнатуға болады:
Ішкі шегіністер орнатылған кезде, бүйір жағы виджетті сол жақ жиекке қысатындықтан, оң жақта 20 пиксельді шегініс аламыз, ал сол жақта ештеңе жоқ. Ішкі жақтаудың шегіністерін белгінің сыртқы шегіністерімен ауыстыру арқылы мәселені ішінара шешуге болады.
Бірақ содан кейін белгілердің арасында алшақтық пайда болады. Оны жою үшін әрбір виджетті өз жақтауына салу керек болады. Бұдан біз Tkinter жиынтығы салыстырмалы түрде қарапайым интерфейстер үшін ғана қолайлы деген қорытындыға келеміз.
Келесі екі қасиет- fill (толықтыру) және expand (кеңейту). Әдепкі бойынша, expand нөлге тең (басқа мәні – бірлік), ал fill – NONE (басқа мәндері BOTH, X, Y).
Бір белгісі бар терезе жасаңыз:
from tkinter import *
root = Tk()
l1 = Label(text="This is a label",
width=30, height=10,
bg="lightgreen")
l1.pack()
root.mainloop()
Егер терезені кеңейте бастасақ немесе оны бүкіл экранға бірден ашатын болсақ, онда белгі жоғарыда тігінен және ортасында көлденең орналасады. Белгінің ортасында тік болмауының себебі, side әдепкі бойынша TOP-қа тең және белгіні жоғарғы жағына бекітеді.
Егер сіз expand қасиетін 1-ге орнатсаңыз, онда терезені кеңейткен кезде белгі әрқашан ортасында болады:
…
l1.pack(expand=1)
…
Fill қасиеті виджетке барлық қол жетімді кеңістікті толтыртады. Оны барлық бағытта немесе осьтердің бірінде ғана толтыруға болады:
…
l1.pack(expand=1, fill=Y)
…
Pack әдісінің соңғы нұсқасы - anchor (зәкір) - N (north - солтүстік), S (south - оңтүстік), W (west - батыс), E (east - шығыс) мәндерін және олардың комбинацияларын қабылдай алады:
…
l1.pack(expand=1, anchor=SE)
…
Практикалық жұмыс
Алдыңғы сабақтың практикалық жұмысынан бағдарламаны интерфейс келесідей болатындай етіп қайта жазыңыз:
Сабақ 4. Text – көп жолды мәтіндік өріс
Бұл оқулықта Tkinter көмегімен көп жолды мәтін өрісі сияқты интерфейс элементін қалай бағдарламалау керектігін қарастырамыз. Бұл виджет веб-пішіндерді толтыру кезінде жиі кездескенмен, үлкен мәтіндік өрісте жұмыс жасайтын “Терминал” бағдарламасын қоспағанда жұмыс үстеліне арналған қосымшаларда сирек кездеседі.
Tkinter-де көп жолды мәтіндік өріс Text класынан жасалады. Әдепкі бойынша оның өлшемі көлденеңнен 80-ге және тігінен 24-ке тең.
Дегенмен, бұл сипаттарды width және height опциялары арқылы өзгертуге болады. Қаріпті, түстерді және т.б. конфигурациялауға болады.
from tkinter import *
root = Tk()
text = Text(width=25, height=5, bg="darkgreen",
fg='white', wrap=WORD)
text.pack()
root.mainloop()
Wrap нұсқасының WORD мәні жаңа жолға сөздерді әріппен емес, толығымен тасымалдауға мүмкіндік береді.
Text және Scrollbar
Мәтін өрісіне оның биіктігіне қарағанда көбірек мәтін жолдары енгізілсе, ол өздігінен төмен қарай жылжиды. Қарау кезінде тінтуір дөңгелегі мен пернетақтадағы көрсеткілерді пайдаланып жоғары-төмен жылжуға болады. Дегенмен, айналдыру жолағын пайдалану ыңғайлы болады.
Tkinter-де скроллерлер Scrollbar класынан шығарылады. Скроллер объектісі талап етілетін виджетпен байланыстырады. Ол көп жолды мәтін өрісі болуы міндетті емес. Тізімдер үшін айналдыру жолақтары жиі қажет, олар кейінірек талқыланады.
from tkinter import *
root = Tk()
text = Text(width=20, height=7)
text.pack(side=LEFT)
scroll = Scrollbar(command=text.yview)
scroll.pack(side=LEFT, fill=Y)
text.config(yscrollcommand=scroll.set)
root.mainloop()
Бұнда айналдыру құралы жасалады, оған мәтін өрісінің y- text.yview осі бойынша жылжуы command опциясы арқылы байланыстырылады. Өз кезегінде, бұрын жасалған айналдыру құралы - scroll.set - yscrollcommand опциясы арқылы мәтіндік өріске орнатылады.
Text әдістері
Text-тің негізгі әдістері Entry -get , insert , delete әдісімен бірдей. Алайда, егер бір жолды мәтін өрісі жағдайында кірістіру немесе жою кезінде бір элемент индексін көрсету жеткілікті болса, онда көп жолды мәтін өрісі жағдайында екеуін - жол нөмірі мен таңба нөмірін осы жолда көрсету керек. (басқаша айтқанда, баған нөмірі). Бұл жағдайда жолдардың нөмірленуі бірден, ал бағандардың нөмірленуі нөлден басталады.
from tkinter import *
def insert_text():
s = "Hello World"
text.insert(1.0, s)
def get_text():
s = text.get(1.0, END)
label['text'] = s
def delete_text():
text.delete(1.0, END)
root = Tk()
text = Text(width=25, height=5)
text.pack()
frame = Frame()
frame.pack()
Button(frame, text="Вставить",
command=insert_text).pack(side=LEFT)
Button(frame, text="Взять",
command=get_text).pack(side=LEFT)
Button(frame, text="Удалить",
command=delete_text).pack(side=LEFT)
label = Label()
label.pack()
root.mainloop()