Дәріс №14. Пайдаланушының графикалық интерфейсі бар қосымшаларды жасау.
Дәріс тақырыбы:Пайдаланушының графикалық интерфейсі бар қосымшаларды жасау.
Дәрістің мақсаты:Пайдаланушының графикалық интерфейсі бар қосымшаларды жасауды қарастыру, талдау.
Тақырып бойынша қарастырылатын сұрақтар:
1. Графикалық кітапханаларға шолу.
2. Tk Негіздері.
3. Виджеттер сыныптары.
4. Виджетті жасау және конфигурациялау.
1. Графикалық кітапханаларға шолу.
Python тіліндегі бағдарламалар үшін пайдаланушының графикалық интерфейсін (GUI, G raphical U ser I nterface) құру графикалық интерфейс компоненттерінің тиісті кітапханаларының көмегімен немесе кальканы ағылшын тілінен, виджет кітапханаларын пайдалана отырып болады.
Келесі тізім толық емес, бірақ бар шешімдердің алуан түрлілігін көрсетеді:
Tkinter көп платформалы пакет компоненттердің орналасуын жақсы басқаруға ие. Интерфейс әртүрлі платформаларда (Unix, Windows, Macintosh) бірдей көрінеді. Python стандартты жеткізіліміне кіреді. Құжаттама ретінде Фредрик Лунд жазған "An Introduction to Tkinter" ("Tkinter-ге кіріспе") нұсқаулығын пайдалануға болады: http://www.pythonware.com/library/tkinter/introduction/
wxPython wxwidgets көп ақылы кітапханасында салынған (бұрын wxWindows деп аталды). Барлық платформалар үшін Ана болып көрінеді, белсенді жетілдірілуде, GL қолдауы жүзеге асырылды. Барлық негізгі платформалар үшін бар. Мүмкін, болашақ Python нұсқаларында Tkinter орын алады. Сайт: http://www.wxpython.org/
PyGTK gtk+ және Gnome үшін визуалды компоненттер жиынтығы. Тек GTK платформасы үшін.
PyQT / PyKDE Qt (UNIX немесе Windows астында) немесе KDE қолданатын адамдар үшін жақсы пакеттер.
Pythonwin MFC айналасында салынған, win32all пакетінде қабықпен бірге жеткізіледі; тек Windows үшін.
pyFLTK Xforms аналогы, OpenGL қолдауы. Windows және Unix платформалары үшін бар. Сайт: http://pyfltk.sourceforge.net/
AWT, JFC, Swing Jython бірге жеткізіледі, ал Jython үшін Java пайдаланатын құралдар қол жетімді. Java платформасын қолдайды.
anygui Python бағдарламасына арналған графикалық интерфейсті құру үшін төменгі платформадан тәуелсіз пакет. Сайт: http://anygui.sourceforge.net/
Pythoncard HyperCard/MetaCard идеологиясы бойынша ұқсас графикалық интерфейс құрастырушысы. WxPython базасында жасалған. Сайт: http://pythoncard.sourceforge.net/.
Python-дан Қол жетімді түрлі графикалық кітапханаларға арналған өзекті сілтемелер тізімін мына мекен-жай бойынша табуға болады: http://phaseit.net/claird/comp.lang.python/python_GUI.html
Кітапхана банк-клиент. Мысалы, PythonCard Wxpython пайдаланады, мысалы, Linux платформасында wxwindows көп платформалды GUI-кітапханасына негізделген, ол өз кезегінде GTK+ немесе Motif - ға негізделген, ал сол да X Window шығару үшін қолданылады. Айтпақшы, Motif үшін Python-да өз байланыстары бар.
Дәрісте TCL сценарий тілі үшін белгілі графикалық пакет - TCL/Tk үшін орама болып табылатын Tkinter пакеті қарастырылады. Бұл пакеттің мысалында пайдаланушының графикалық интерфейсін құрудың негізгі принциптерін үйрену оңай.
Графикалық интерфейс туралы.
Жалпы мақсаттағы барлық заманауи графикалық интерфейстер WIMP - Window, Icon, Menu, Pointer (терезе, иконка, мәзір, көрсеткіш) моделі бойынша құрылады. Терезелердің ішінде Графикалық интерфейстің элементтері бейнеленеді, олар қысқа виджеттер деп аталады (widget - штучка). Мәзір терезенің әр түрлі бөліктерінде орналасуы мүмкін, бірақ олардың мінез-құлықтары бірдей: олар алдын ала анықталған әрекеттер жиынтығынан әрекетті таңдау үшін қызмет етеді. Графикалық интерфейсті пайдаланушы" түсіндіреді " қажетті әрекеттерді компьютерлік бағдарламаға көрсеткіш көмегімен түсіндіреді. Әдетте көрсеткіш тінтуір меңзері немесе джойстик болып табылады, бірақ басқа да "сілтегіш" құрылғылар бар. Көмегімен иконок графикалық интерфейс иеленеді тәуелсіздігі тілі және кейбір жағдайларда мүмкіндік береді тез бағдарлай интерфейс.
Графикалық интерфейстің негізгі міндеті пайдаланушы мен компьютер арасындағы коммуникацияны жеңілдету болып табылады. Бұл туралы интерфейсті жобалау кезінде үнемі есте сақтау керек. Программисте (немесе дизайнерде) бар құралдарды қолдану графикалық интерфейсті жасау кезінде әрбір нақты жағдайда пайдаланушыға ыңғайлы виджеттерді таңдай отырып, минимумға дейін қою керек. Сонымен қатар, ең аз таң қаларлық принципін ұстану пайдалы: интерфейс формасынан оның мінез-құлқы түсінікті болуы керек. Нашар ойластырылған интерфейс, тіпті интерфейстің қасбетінде тиімді алгоритм жасырылса да, пайдаланушының бағдарламадан сезінуін бұзады. Интерфейс пайдаланушының типтік әрекеттері үшін ыңғайлы болуы керек. Көптеген қолданбалар үшін мұндай әрекеттер "шеберлер" (wizards) деп аталатын экрандардың жеке серияларына бөлінген. Алайда, егер қосымша-пайдаланушы өзіне қажетті шешімдерді құра алатын конструктор болса, типтік әрекет шешімді құру болып табылады. Типтік әрекеттерді анықтау оңай емес, сондықтан компромиссом "шеберлер" бар гибрид болуы мүмкін және өз құрылыстары үшін жақсы мүмкіндіктер. Дегенмен, графикалық интерфейс барлық жағдайларда ең тиімді интерфейс емес. Көптеген пәндік салалар үшін шешімді белгілі бір формальды тілде немесе сценарий тілінде алгоритм арқылы мәлімдеу оңайырақ.
2. Tk Негіздері.
Графикалық интерфейсі бар кез келген бағдарламаның негізгі ерекшелігі-интерактивтілік. Бағдарлама жай ғана бір нәрсе (пакеттік режимде) өзінің іске қосылуынан аяғына дейін санайды: оның әрекеттері пайдаланушының араласуына байланысты. Іс жүзінде, графикалық қосымша оқиғаларды өңдеудің шексіз циклын орындайды. Графикалық интерфейсті іске асыратын бағдарлама оқиғалы-бағытталған. Ол өзінің ішкі жағдайына сәйкес өңделетін оқиғалар интерфейсінен күтеді.
Бұл оқиғалар графикалық интерфейс элементтерінде (виджеттерде) пайда болады және осы виджеттерге бекітілген өңдеушілермен өңделеді. Виджеттердің өздері көптеген қасиеттерге ие( түсі, өлшемі, орналасуы), тиісті иерархияға (бір виджет басқасының иесі болуы мүмкін), жай-күйіне қол жеткізу әдістері бар.
Виджеттердің орналасуы (басқа виджеттердің ішінде) орналасу менеджерлері деп аталады. Виджет орналасу менеджерінің ережелері бойынша орынға орнатылады. Бұл ережелер виджет координаттарын ғана емес, оның өлшемдерін де анықтай алады. Tk-да орналасқан менеджерлердің үш түрі бар: қарапайым ораушы (pack), тор (grid) және еркін орналасуы (place).
Бірақ бұл графикалық бағдарлама үшін жеткіліксіз. Себебі, графикалық бағдарламадағы кейбір виджеттер белгілі бір жолмен өзара байланысты болуы керек. Мысалы, жылжыту жолағы мәтіндік виджетпен өзара байланысты болуы мүмкін: жолақты пайдаланған кезде виджеттегі мәтін қозғалуы тиіс және керісінше, мәтін бойынша жылжыған кезде жолақтың ағымдағы жағдайын көрсетуі тиіс. TK виджеттері арасындағы байланыс үшін виджеттер мен параметрлерді бір-біріне беретін айнымалылар қолданылады.
3. Виджеттер сыныптары.
Tk кітапханасында графикалық интерфейсті құру үшін виджеттердің келесі сыныптары таңдалып алынды (алфавиттік ретпен):
Button (түйме) кейбір әрекеттерді шақыру (белгілі бір пәрменді орындау) үшін қарапайым түйме.
Canvas (сурет) графикалық примитивтерді шығару негізі.
Checkbutton (құсбелгі) оған басқан кезде екі күй арасында ауыса алатын түйме.
Entry (енгізу өрісі) мәтін жолын енгізуге болатын көлденең өріс.
Frame (Рамка) басқа көрнекі компоненттерді қамтитын Виджет.
Label (жазу) Виджет мәтінді немесе графикалық суретті көрсете алады.
Listbox (тізім) пайдаланушы бір немесе бірнеше элементтерді таңдай алатын тізімді тікбұрышты рамка.
Menu (мәзір) қалқымалы (popup) және төмен түсетін (pulldown) мәзірлерді жасауға болатын Элемент.
Menubutton (мәзір түймесі) төмендеу мәзірі бар түйме.
Message (хабар) жазуларға ұқсас, бірақ ұзын жолдарды бұрауға және орналасу менеджерінің талабы бойынша өлшемін өзгертуге мүмкіндік береді.
Radiobutton (селекторлы түйме) балама мәндердің бірін ұсынуға арналған түйме. Мұндай түймелер әдетте топта әрекет етеді. Басқан кезде бір түйме тобы таңдалған, бұдан бұрын "секіріп".
Scale (Шкала) белгілі бір диапазонда жылжу арқылы сандық мәнді орындау үшін қызмет етеді.
Scrollbar (айналдыру жолағы) айналдыру жолағы басқа виджеттерде айналдыру көлемін көрсету үшін қолданылады. Мүмкін тік және көлденең.
Text (пішімделген мәтін) бұл тікбұрышты виджет әр түрлі стильдерді пайдаланып мәтінді өңдеуге және пішімдеуге, мәтінге суреттер мен тіпті терезелерді енгізуге мүмкіндік береді.
Toplevel (жоғарғы деңгей терезесі) бөлек терезе ретінде көрсетіледі және басқа виджеттер ішінде болады.
Бұл сыныптардың барлығы бір - бірімен мұрагерлік қатынастары жоқ-олар тең. Бұл жинақ көптеген жағдайларда интерфейсті құру үшін жеткілікті.
Оқиғалар.
Қазіргі заманғы графикалық интерфейс жүйесінде пернетақта мен тінтуірмен байланысты және қандай да бір виджеттің" аумағында" болып жатқан түрлі оқиғаларды бақылау мүмкіндігі бар. Оқиға елінде мәтіндік жол - үш элементтен (модификаторлар, оқиғаның түрі және оқиғаның детализациясы) тұратын оқиға үлгісі түрінде сипатталады.
4. Виджетті жасау және конфигурациялау.
Виджетті жасау тиісті сынып конструкторының шақыруы арқылы жүзеге асырылады . Конструктор шақыру келесі синтаксис бар:
Widget([master[, option=value, ...]])
Мұнда widget - виджет класы, masterвиджет-иесі, option және value - конфигурациялық опция және оның мәні (мұндай жұптар бірнеше болуы мүмкін).
Әрбір виджет config () (немесе configure ())) әдістерімен орнатуға және сөздіктермен жұмыс істеу әдістеріне ұқсас әдістермен оқуға болатын қасиеттерге ие. Төменде қасиеттермен жұмыс істеу үшін мүмкін синтаксис:
widget.config(option=value, ...)
widget["option"] = value
value = widget["option"]
widget.keys()
Сипат атауы Python тілінің негізгі сөзімен сәйкес келген жағдайда, атаудан кейін бір астын сызу қолданылады. Сонымен, class қасиетін class_ сияқты, to_ сияқты қою керек.
Виджет конфигурациясын кез келген уақытта өзгертуге болады. Бұл өзгеріс оқиғаны өңдеу циклына қайта оралғанда немесе update_idletasks () айқын қоңырауы кезінде экранда сызылады.
Келесі мысал ішінде екі виджеті бар терезені көрсетеді. Айнымалы жазба енгізу өрісімен тікелей байланысты. Бұл мысал конфигурациялау мүмкіндіктерін көрсету үшін көптеген қасиеттерді пайдаланады:
from Tkinter import *
tk = Tk()
tv = StringVar()
Label(tk,
textvariable=tv,
relief="groove",
borderwidth=3,
font=("Courier", 20, "bold"),
justify=LEFT,
width=50,
padx=10,
pady=20,
takefocus=False,
).pack()
Entry(tk,
textvariable=tv,
takefocus=True,
).pack()
tv.set("123")
tk.mainloop()
Нәтижесінде экранда көруге болады:
Виджеттер жасау кезінде теңшеледі. Сонымен қатар, виджеттер аттармен байланыспайды, оларды тек виджет-терезе ішінде орналастырады. Бұл мысалда textvariable (мәтіндік айнымалы), relief (рельеф), borderwidth (шекараның ені), justify (туралау), width (ені, таныстарда), padx және pady (виджет шегі мен мазмұн арасындағы пикселдегі қабат), takefocus (Tab пернесін басқан кезде фокусты қабылдау мүмкіндігі), font (қаріп, оның тапсырмасының бір тәсілі) қасиеттері қолданылған. Бұл қасиеттер көптеген виджеттер үшін өте типтік, бірақ кейде өлшем бірліктері өзгеше болуы мүмкін, мысалы, Canvas виджеті үшін ені танысу емес пикселде беріледі.
Келесі мысалда фонға, алдыңғы жоспарға (мәтінге), виджетті (шекараны жарықтандыру) белсенді күйде және фокус болмаған кезде бөлу мүмкіндіктері көрсетіледі:
from Tkinter import *
tk = Tk()
tv = StringVar()
Entry(tk,
textvariable=tv,
takefocus=True,
borderwidth=10,
).pack()
mycolor1 = "#%02X%02X%02X" % (200, 200, 20)
Entry(tk,
textvariable=tv,
takefocus=True,
borderwidth=10,
foreground=mycolor1, # fg, текствиджета
background="#0000FF", # bg, фонвиджета
highlightcolor='green', # подсветкаприфокусе
highlightbackground='red', # подсветкабезфокуса
).pack()
tv.set("123")
tk.mainloop()
Қаласаңыз, барлық виджеттер үшін мәнерлі опцияларды бірден орнатуға болады: tk_setPalette () әдісі арқылы. Бұл әдіс бойынша жоғарыда пайдаланылған сипаттардан басқа, selectForeground және select Background (алдыңғы жоспар және бөлу фоны), selectColor (таңдалған күйдегі түс, мысалы, Checkbutton), insertBackground (кірістіру нүктесінің түсі) және т.б. пайдалануға болады.
Ескертпе:
Енгізу өрісінен get () әдісі арқылы да мәнді алуға болады. Мысалы, Entry класының нысанын E деп атасаңыз, мәнді келесідей алуға болады: e.get(). Рас, бұл әдіс Text пішімделген мәтін үшін сынып даналарының get() әдісі сияқты икемділікке ие емес: тек барлық мәнді толығымен алуға болады.
Достарыңызбен бөлісу: |