![]() |
![]() |
![]() |
![]() |
![]() |
Python GUI (Graphic user interface)
Python ìຠáåçë³÷ ôðåéìâîðê³â ç ãðàô³÷íèì ³íòåðôåéñîì, àëå Tkinter - ºäèíèé ôðåéìâîðê, âáóäîâàíèé ó ñòàíäàðòíó á³áë³îòåêó Python. Tkinter ìຠê³ëüêà ñèëüíèõ ñòîð³í. ³í êðîññïëàòôîðìåííèé, òîìó îäèí ³ òîé æå êîä ïðàöþº â Windows, macOS ³ Linux. ³çóàëüí³ åëåìåíòè â³çóàë³çóþòüñÿ ç âèêîðèñòàííÿì âëàñíèõ åëåìåíò³â îïåðàö³éíî¿ ñèñòåìè, òîìó ïðîãðàìè, ñòâîðåí³ çà äîïîìîãîþ Tkinter, âèãëÿäàþòü òàê, í³áè âîíè íàëåæàòü ïëàòôîðì³, äå âîíè âèêîíóþòüñÿ. Íà ïåðøèé ïîãëÿä â ñêëàä³ á³áë³îòåê Tkinter íå òàê âæå áàãàòî â³äæåòîâ, òîáòî, ãðàô³íèõ åëåìåíò³â GUI äëÿ ðîçðîáêè ³íòåðôåéñ³â ó äîäàòêàõ. Àëå òðåáà çàóâàæèòè, ùî ïðàêòè÷íî äëÿ âñ³õ äîäàòê³â òåõí³÷íîãî ñïðÿìóâàííÿ, òàêèõ â³äæåò³â á³ëüø í³æ äîñòàòíüî. Tkinter íàäຠâ³äæåòè ó äâîõ âàð³àíòàõ: â³äæåòè, ÿê³ ðîçì³ùóþòüñÿ áåçïîñåðåäíüî â ïàêåò³ tkinter, òà â³äæåòè ç ïàêåòó tkinter.ttk. Ç îäíîãî áîêó, îáèäâà ïàêåòè íàäàþòü ïðàêòè÷íî ò³ ñàì³ â³äæåòè, íàïðèêëàä, â³äæåò Button º â îáîõ ïàêåòàõ. Àëå ç ³íøîãî áîêó, ttk íàäຠòðîõè á³ëüøå ôóíêö³îíàëüíîñò³ íàëàøòóâàííÿ â³äæåò³â, çîêðåìà, ¿õ ñòèë³çàö³¿. ² ââàæàºòüñÿ, ùî â³äæåòè ç ttk äåùî ñó÷àñí³ø³, í³æ ñòàíäàðòí³, â òîé æå ÷àñ ç ttk, ìîæëèâî, òðîõè ñêëàäí³øå ïðàöþâàòè. Ùî âèêîðèñòîâóâàòè çàëèøàºòüñÿ íà âèá³ð ðîçðîáíèêà. Íà ïî÷àòîê 2023 ðîêó íàéá³ëüø ñòàá³ëüíîþ ââàæàºòüñÿ âåñ³ÿ Python 3.7 ÿêà âêëþ÷ຠâ ñåáå Tkinter âåðñ³¿ Tcl/Tk 8.6, à ñàìå:
Çàóâàæèìî, âñ³ ïðèêëàäè, ùî íàâåäåí³ íà ö³é ñòîð³íö³, âåð³ô³êîâàí³ ñàìå â âåðñ³¿ Python 3.7, òîáòî, Tkinter âåðñ³¿ Tcl/Tk 8.6. òà îïåðàö³éí³é ñèñòåì³ Windows 10 |
Ñüîãîä³ â ³íòåðíåò³ ìîæà çíàéòè äóæå áàãàòî ñòîð³íîê, ùî ïîñâÿ÷åí³ ñàìîñò³éíîìó îïàíóâàííþ Tkinter, àëå á³ëüøèñòü ç íèõ ìຠäóæå ñïðîùåíó àáî íåïîâíó ³íôîðìàö³þ. ϳñëÿ òðèâàëîãî ñåðô³íãó ïî òàêèì ñòîð³íêàì, íà ì³é ïîãëÿä, ìîæíà ðåêîìåíäóâàòè òàê³ ñòîð³íêè:
Íà ñüîãîäí³ äîâ³äêîâà äîêóìåíòàö³ÿ äëÿ Tkinter 8.5 ³ç äåòàëüíèì îïèñîì äîñòóïíèõ êëàñ³â, ìåòîä³â ³ ïàðàìåòð³â (àòðèáóò³â), ùî ìîæå â ïîâíîìó îáñÿç³ âèêîðèñòîâóâàòèñÿ äëÿ âåðñ³¿ 8.6, º íàéá³ëüø ïîâíîþ äîêóìåíòàö³ºþ ïî ñèñòåì³ Tkinter. Ñàìå òîìó íèæ÷å ïðèâåäåíî ïîñèëàííÿ íà çàâàíòàæåííÿ öüîãî äîêóìåíòó ó pdf-ôîðìàò³: |
³êíà Tkinter öå îñíîâí³ íîñ³¿ ãðàô³÷íîãî ³íòåðôåéñó êîðèñòóâà÷à. Âçàãàë³
á³ëüøèñòü äîäàòê³â çàñòîñîâóþòü ëèøå îäíî â³êíî ç òèïîâèì ³ì'ÿì root.
Äëÿ ñòâîðåííÿ â³êíà äîñòàòíüî âèêîíàòè íàñòóïíèé êîä:
Ïðèêëàäè
|
|
Ðîçãëÿäàþ÷è êîäè ðîçä³ëó "³êíà Tkinter" âè ìàáóòü çâåðíóëè óâàãó, ÷òî çíà÷íà ÷àñòèíà êîäó ïðèä³ëÿåòüñÿ îôîðìëåííþ. Ç îäíîãî áîêó öå çðîçóì³ëî, áî ìè ðîçãëÿäàºìî Tkinter, à ç äðóãîãî áîêó, ìàºìî òðóäíîù³ ç ñïðèíÿòòÿì ôóíêö³îíàëüíîãî ñåíñó òàêîãî îôîðìëåííÿ. Îñîáëèâî öå ñòîñóºòüñÿ ïî÷èíàþ÷èõ âèâ÷àòè Python.
Íàæàëü á³ëüøèñòü äæåðåë ³íôîðìàö³¿, ïðèñâÿ÷åíèõ Tkinter, ëèøå äîäàþòü òàêèõ òðóäíîù³â, áî çíàéòè â³äïîâ³äü íà êîíêðåòíå ïèòàííÿ â íèõ äîñèòü âàæêî. Ùå îäíà ïåðåøêîäà äëÿ ïî÷àòê³âö³â öå â³äñóòí³ñòü çðó÷íî¿ HELP-ñèñòåìè ç Tkinter (íà ïî÷àòîê 2023 ðîêó ÿ òàêî¿ ñèñòåìè íå çíàéøîâ). Òîìó ÷àñò³øå äîâîäèòüñÿ êîðèñò³âàòèñÿ ³íôîðìàö³ºþ ç ð³çíèõ ñàéò³â.
Âèõîäÿ÷è ç ñêàçàíîãî, ïî÷àòê³âöÿì ìîæíà íàäàòè íàñòóïí³ ðåêîìåíäàö³¿:
Ôðåéìè (Frames) öå íàñòóïíèé (ñë³äîì çà â³êíàìè) ð³âåíü ñòðóêòóð³çàö³¿ ãðàô³÷íîãî ³íòåðôåéñó êîðèñòóâà÷à. Ôðåéìè ìîæíà óìîâíî ðîçãëÿäàòè ÿê âáóäîâàí³ â ðåàëüíå â³êíî â³äæåòè-êîíòåéíåðè, ùî ïîä³áí³ äî â³êîí. Ôðåéìè çäàòí³ áóòè êîíòåéíåðàìè äëÿ ³íøèõ ôðåéì³â, òîáòî â îäíîìó ôðåéì³ ìîæíà ðîçì³ñòèòè íåîáõ³äíó ê³ëüê³ñòü äîäàòêîâèõ ôðåéì³â. ßê â³äæåòè, ôðåéìè òàêîæ íàëåæèòü ïàêóâàòè. Òîáòî, äî ôðåéìîâ íåîáõ³äíî çàñòîñîâóâàòè ïàêóâàëüíèêè place àáî pack àáî grid. Îêðåìî ìè íå ðîçãëÿäàëè ä³þ ïàêóâàëüíèê³â íà â³äæåòè, áî òàêà ä¿ÿ ìຠáåçë³÷ âàð³àíò³â, îñîáëèâî ç óðàõóâàííÿì ïàðàìåòð³â ïàêóâàëüíèê³â òà âïëèâ íà ïàêóâàííÿ îòî÷óþ÷èõ â³äæåò³â. ßê âèõ³ä ç òàêîãî ð³çíîìàí³òòÿ ìîæíà îáðàòè îêðåì³ âàð³àíòè òà â ïîäàëüøîìó çàñòîñîâóâàòè ¿õ ïîä³áíî øàáëîíàì. Ñàìå òàê³ ïðèêëàäè-øàáëîíè çàïðîïàíóºìî ³ äî ôðåéì³â. Äîäàòêîâî íàâåäåìî øâèäê³ ïîñèëàííÿ íà äîêóìåíòàö³þ. Çàóâàæèìî, ùî îêðåì³ ïàðàìåòðè â³äæåò³â ìàþòü ñâî¿ âëàñòí³ ïàðàìåòðè. Òîìó â äîêóìåíòàö³¿ ãîëîâí³ ïàðàìåòðè â³äæåòó ìàþòü íàçâó "àòðèáóòè". Òîáòî, ïàðàìåòðè àòðèáóòó öå éãî âëàñòí³ ïàðàìåòðè.
Frame ç ïàêóâàííÿì place òà grid
( ïàïêà 01_Frame_place_grid )
|
Frame ç ïàêóâàííÿì pack òà grid
( ïàïêà 02_Frame_pack_grid )
Âêëàäêè ç ôðåéìàìè ttk.Notebook
|
Ïî䳿, öå îñíîâíèé çàñ³á ³í³ö³þâàòè ñï³ëêóâàííÿ ïðîãðàì ÿê ïîì³æ ñîáîþ, òàê ³ ç ê³íöåâèì êîðèñòóâà÷åì. Çàçâè÷àé äæåðåëà ïîä³é óìîâíî ïîä³ëÿþòü íà àïàðàòí³ (ô³çè÷í³) òà ïðîãðàìí³, àëå (ç çàçíà÷åíîãî íèæ÷å) âñ³ ïî䳿 ìàáóòü ìîæíà ïîçíà÷èòè ÿê àïàðàòíî-ïðîãðàìí³ ïî䳿, àáî ïðîñòî ïî䳿. Äî àïàðàòíèõ ïîä³é â³äíîñÿòü òàê³ ïî䳿, ùî ³í³ö³þþòü àáî âóçëè ìàòåðèíñüêî¿ ïëàòè (ïðîöåñîð, òàéìåð, êîíòðîëåðè â³äåîêàðò, HDD, êîíòðîëåðè ìåðåæåâîãî îáëàäíàííÿ, òà ³íø³ êîíòðîëåðè), àáî ïåðèôåð³éí³ âóçëè êîìï'þòåðà (êëàâ³àòóðà, ìèøêà, ïðèíòåð, ñêàíåð òà ³íø³). Äî äæåðåë ïðîãðàìíèõ ïîä³é â³äíîñÿòü ñïåö³àëüí³ êîìàíäè (³íñòðóêö³¿), ùî ìîæå çàñòîñîâóâàòè ïðîãðàì³ñò ïðè êîäóâàíí³ ïðîãðàìè. Îïåðàö³éíà ñèñòåìà “ïðîñëóõîâóº” âñ³ çàçíà÷åí³ äæåðåëà àïàðàòíèõ ïîä³é, ÷àñòêîâî ïîä³é ïðîãðàìíèõ òà ðîçïî÷èíຠ¿õ ïðîãðàìíó îáðîáêó òà ìàðøðóòèçàö³þ äî ñèñòåìíèõ àáî ïðèêëàäíèõ ïðîãðàì. Ïðîãðàìí³ íàäáóäîâè ïðàêòè÷íî âñ³õ ñó÷àñíèõ ñèñòåì ïðîãðàìóâàííÿ ïîâ³äîìëÿþòü îïåðàö³éíó ñèñòåìó íà ÿê³ ³ç çàçíà÷åíèõ ïîä³é âîíè òàêîæ ïîâèíí³ ðåàãóâàòè. Tkinter, ÿê ïðîãðàìíà íàäáóäîâà Python, òàêîæ (çà äîïîìîãîþ ÿäðà Python) ðåºñòðóº â îïåðàö³éí³é ñèñòåì³ ïî䳿 íà ÿê³ íåîáõ³äíî ðåàãóâàòè.  ïåðøó ÷åðãó äî òàêèõ ïîä³é â³äíîñÿòüñÿ ïî䳿 êëàâ³àòóðè òà ìèøêè.  ñâîþ ÷åðãó, Tkinter çáèðຠñïèñîê íåîáõ³äíèõ ïîä³é â³ä â³äæåò³â, ùî çàñòîñóâàâ ïðîãðàì³ñò â ñâî¿é ïðîãðàì³, òà âèêîíóº ìàðøðóòèçàö³þ òàêèõ ïîä³é â³äïîâ³äíèì â³äæåòàì äëÿ âíóòð³øíüî¿ îáðîáêè òà ïîäàëüøî¿ ìàðøðóòèçàö³¿ äî ïðîãðàì, ùî êîäóº ïðîãðàì³ñò, òîáòî îáðîáíèê³â ïîä³é ϳäêëþ÷åííÿ îáðîáíèê³â ïîä³é, ùî êîäóº ïðîãðàì³ñò, âèêîíóºòüñÿ (ÿê ïðàâèëî) çà äîïîìîãîþ äâîõ ïðîãðàìíèõ ³íòåðôåéñ³â. Öå ³íñòðóêö³ÿ bind àáî àòðèáóò command (ÿêùî â³í âõîäèòü äî ñêëàäó àòðèáóò³â â³äæåòà, íàïðèêëàä: Button, Checkbutton, Radiobutton, Spinbox, Scrollbar, Scale) ϳäêëþ÷åííÿ (ïðèâÿçêà) îáðîáíèêà ïîä³é ³íñòðóêö³ºþ bind
³ì'ÿ_â³äæåòà.bind("<³ì'ÿ_ïî䳿>", ³ì'ÿ_îáðîáíèêà)
Íàâåäåìî ïðîñòèé ïðèêëàä:
def MyEventHandler(event) # Îáðîáíèê ïî䳿
 öüîìó ïðèêëàä³ êîä ïðîãðàìè ï³äêëþ÷ຠîáðîáíèê ïî䳿 MyEventHandler ï³äêëþ÷åíèé íà ïîä³þ "êë³ê íà ë³â³é êíîïö³ ìèøêè", ÿêà âèíèêຠÿêùî êóðñîð çíàõîäèòüñÿ íà íàäïèñó Lb01. ³äïîâ³äíî îáðîáíèê MyEventHandler ðîçäðóêîâóº âñ³ äîñòóïí³ âëàñòèâîñò³ (property) îá'ºêòà event, ùî êîíêðåòíèé â³äæåò ïåðåäຠîáðîáíèêó ÿê ïàðàìåòð.
Ïðîòå Tkinter äîçâîëÿº çàñòîñîâóâàòè çíà÷íó ê³ëüê³ñòü ïîä³é (òà ¿õ ìîäèô³êàö³é), ùî
êîäóþòüñÿ ïðîãðàì³ñòîì ÿê êîíêðåòíà ñòðîêà
Âàð³àíòè ï³äêëþ÷åííÿ òà â³äïîâ³äíîãî ñèíòàêñèñó ³íñòðóêö³¿ bind 1) ϳäêëþ÷åííÿ ïî䳿 òà ïåðåäà÷à îáðîáíèêó êð³ì îá'ºêòà event ùå îäíðãî àáî äåê³ëüêà äîäàòêîâèõ ïàðàìåòð³â. Ïàðàìåòðè ìîæíà êîäóâàòè êîíñòàíòàìè àáî ³ìåíàìè çì³ííèõ (â îáðîáíèê ïåðåäàºòüñÿ çíà÷åííÿ çì³ííî¿). Âèá³ð ³ìåí ó âèãëÿä³ ev, x òà y íå º îáîâ'ÿçêîâèì, àëå ³ì'ÿ Event òðåáà êîäóâàòè òàê, ÿê ïîêàçàíî â ñèíòàêñèñ³
³ì'ÿ_â³äæåòà.bind("<³ì'ÿ_ïî䳿>", (lambda_ôóíêö³ÿ))
2) ϳäêëþ÷åííÿ äâîõ îáðîáíèê³â íà îäíó ïîä³þ. Çâè÷àéíî ìè ìàºìî ìîæëèâ³ñòü âèêëèêàòè ç îáðîáíèêà_1 (ÿê ôóíêö³þ) îáðîáíèê_2, òà ÿêùî íàâåäåí³ îáðîáíèêè ïëàíóºòüñÿ íåçàëåæíî âèêëèêàòè ç ³íøèõ ïîä³é, òî òàêà ìîæëèâ³ñòü ñòຠîáãðóíòîâàíîþ.
³ì'ÿ_â³äæåòà.bind("<³ì'ÿ_ïî䳿>", ³ì'ÿ_îáðîáíèêà_1)
3) ϳäêëþ÷åííÿ îáðîáíèêà íà â³ðòóàëüíó ïîä³þ. ³ðòóàëüíà ïîä³ÿ îá'ºäíóå äåê³ëüêà çâè÷àéíèõ ïîä³é òà ÿêùî îáðîáíèê ï³äêëþ÷åí íà â³ðòóàëüíó ïîä³þ, òî êîæíà ç ðåàëüíèõ ïîä³ (â ñêëàä³ â³ðòóàëüíî¿) ³í³ö³þº âèêëèê òàêîãî îáðîáíèêà.
³ì'ÿ_â³äæåòà.bind("<<³ì'ÿ_â³ðòóàëüíî¿_ïî䳿>>", ³ì'ÿ_îáðîáíèêà)
Ùîá âèêîðèñòîâóâàòè â³ðòóàëüíó ïîä³þ ¿³ ç ïî÷àòêó òðåáà ñòâîðèòè. Äëÿ öüîãî çàñòîñîâóºòüñÿ ³íñòðóêö³ÿ event_add
³ì'ÿ_â³äæåòà.event_add("<<³ì'ÿ_â³ðòóàëüíî¿_ïî䳿>>", ñïèñîê_ïîä³é)
Ðåàëüíó ïîä³þ ìîæíà òàêîæ âèêëþ÷èòè ç³ ñêàäó â³ðòóàëüíî¿. Äëÿ öüîãî çàñòîñîâóºòüñÿ ³íñòðóêö³ÿ event_delete. Ïðåô³êñ ³ì'ÿ_ äëÿ ñêîðî÷åííÿ òåêñòó íå âêàçàíî.
â³äæåò.event_delete("<<â³ðòóàëüíà_ïîä³ÿ>>","<ïîä³ÿ>")
ϳäêëþ÷åííÿ (ïðèâÿçêà) îáðîáíèêà àòðèáóòîì command ßùî äî ñêëàäó àòðèáóò³â â³äæåòó âõîäèòü àòðèáóò command, òî çà çàìîâ÷åííÿì òàêèé â³äæåò áóäå ðåàãóâàò³ íà ïîä³þ "<Button-1>" (ë³âà êíîïêà ìèøêè), à àòðèáóò command áóäå âèçíà÷àòè â³äïîâ³äíèé îáðîáíèê ïî䳿 òà ç ÿêèìè ïàðàìåòðàìè éîãî òðåáà âèêîíàòè. Ó ïðèêëàäíîìó ïðîãðàìóâàíí³ ðåêîìåíäóºòüñÿ âèêëèêàòè îáðîáíèê çà äîïîìîãîþ Lambda ôóíêö³¿:
command = lambda_ôóíêö³ÿ
Lambda ôóíêö³ÿ, öå ôóíêö³ÿ ùî íå ìຠñâîãî èì'ÿ òà ÷àñò³øå çà âñå âèêîðèñòîâóºòüñÿ ÿê
³íòåðôåéñ äÿ ïåðåäà÷³ çíà÷åíü ïàðàìåòð³â â îáðîáíèê ïîä³é. Àëå ìîæëèâîñò³
Lambda ôóíêö³¿ çíà÷íî øèðøå - äåòàëüí³øå ïðî òàê³ òìîæëèâîñò³ ìîæíà ä³çíàòèñÿ çà ïîñèëàííÿì: |
³äêëþ÷åííÿ îáðîáíèêà ³íñòðóêö³ºþ unbind Çâè÷àéíó àáî â³ðòóàëüíó ïîä³þ ìîæíà òàêîæ â³äêëþ÷èòè â³ä îáðîáíèêà íà êîíêðåòíîìó â³äæèò³. äëÿ öüîãî çàñòîñîâóºòüñÿ òàêà ³íñòðóêö³ÿ:
³ì'ÿ_â³äæåòà.unbind("<³ì'ÿ_ïî䳿>")
Äëÿ óíèêíåííÿ ïîìèëîê ñë³äêóéòå ùîá â³äêëþ÷åííÿ âèêîíóâàëîñü â³äïîâ³äíèì unbind, òîáòîî ÿêùî ï³äêëþ÷åííÿ âèêîíóâàëîñÿ bind_all, òî â³äêëþ÷åííÿ òàêîæ ïîâèííî âèêîíóâàòèñÿ unbind_all. ϳäêëþ÷åííÿ îáðîáíèêà ³íñòðóêö³ºþ tag_bind tag_bind öå ñïåöèô³÷íå ï³äêëþ÷åííÿ îáðîáíèêà ï äî ãðàô³÷íèõ îá'ºêò³â íà canvas, òàêèõ ÿê ë³í³ÿ, ïðÿìîêóòíèê, åë³ïñ òîùî. Êîëè íà canvas ñòâîðþºòüñÿ ãðàô³÷íèé ºëåìåíò, ìåòîä ñòâîðåííÿ .create_åëåìåíò ïîâåðòຠ÷èñëî-³äåíòèô³êàòîð ºëåìåíòó â çàðåçåðâîâàíó çì³ííó ç ³ì'ÿì id. Âçàãàë³ ³ì'ÿ id íå º îáîâ'ÿçêîâèì àëå êðàùå ïðèòðèìóâàòèñÿ éîãî. Íàâåäåìî ïðîñòèé ïðèêëàä:
canvas = Canvas(root, bg="white", width=250, height=150) |
Ñüãîäí³ ïðàêòè÷íî âñ³ îïåðàö³éí³ ñèñòåìè òà àëãîðèòì³÷í³ ìîâè âèñîêîãî ð³âíÿ âèêîðèñòîâóþòü ãðàôè÷í³ ³íòåðôåñè äëÿ âçàºìî䳿 ç ê³íöåâèì êîðèñòóâà÷åì. Íàé÷àñò³øå ãðàô³êà â ñêëàä³ àëãîðèòì³÷íèõ ìîâ âèñîêîãî ð³âíÿ ðåàë³çóºòüñÿ ÷åðåç ïðîì³æí³ ïðîãðàìí³ ³íòåðôåéñè çàñîáàìè ùî âáóäîâàí³ â îïåðàö³éí³ ñèñòåìè. Òàêà àðõèòåêòóðà ãðàô³êè çíà÷íî ðîçøèðþº êðîñïëàòôîðìåí³ ÿêîñò³ ìîâ ïðîãðàìóâàííÿ.  òîé æå ÷àñ, îêðåì³ âèñîêîð³âí³ ìîâè ïðîãðàìóâàííÿ (â òîìó ÷èñë³ ³ Python) ñòâîðåí³ ÿê êîíñîëüí³ ³íòåïðèòàðîðè òà äëÿ ðàáîòè ç ãðàô³êîþ ïîòðåáóþòü äîäàòêîâèõ ïðîãðàìíèõ íàäáóäîâ - IDLE (Integrated Development and Learning Environment) äëÿ ïðîãðàì³ñòà íà íàäáóäîâ äëÿ ðåàë³çàö³¿ ïðîãðàì (â íàøîìó âèïàäêó öå íàäáóäîâà Tkinter, ÿêó ìè ðîçãëÿäàºìî). ³äîìîþ îñîáëèâ³ñòþ Python, º éîãî îá'åêòíà àðõèòåêòóðà. Òîáòî êîæíà îêðåìà îäèíèöÿ ç ÿêîþ îïåðóº Python öå îá'åêò ùî ìàå ñâ³é òèï, à òàêîæ ìîæå ìàòè ñâî¿ ìåòîäè òà âëàñòèâîñò³. Öÿ îñîáëèâîñòü ï³äêðåñëþºòüñÿ âî âñ³õ îô³ö³éíèõ äîêóìåíòàõ Python. Ùî öå îçíà÷ຠç òî÷êè çîðó êîìï'þòåðíî¿ ãðàô³êè? - Ïîïåðøå íåîáõ³äí³ñòü ñòâîðèòè îá'åêò canvas (ïîëîòíî), ÿêèé áóäå îñíîâîþ äëÿ ³íøèõ ãðàô³÷íèõ åëåìåíò³â çîáðàæåííÿ. Ïîäðóãå, êîæåí ãðàô³÷íèé åëåìåíò çîáðàæåííÿ (äàë³ ô³ãóðà) òàêîæ ìຠáóòè ñòâîðåíèé ÿê îá'åêò, òîáòî ë³íèÿ, ïðÿìîêóòíèê, åë³ïñ òà ³íø³ ô³ãóðè öå îá'åêòè ùî ìàþòü ñâîè âëàñòèâîñò³ òà ñâî¿ ìåòîäè. Äëÿ ïðèêëàäíîãî ïðîãðàì³ñòà òàêà àðõèòåêòóðà çíà÷íî ñïðîùóº ñòâîðåííÿ ïðîãðàì. Íàïðèêëàä, ìåòîä move âèäàëÿº ôèãóðó íà ñòàðîìó ì³ñö³, â³äíîâëþº çîáðàæåííÿ ùî ïåðåêðèâàëà ô³ãóðà òà ìàëþº ô³ãóðó íà íîâîìó ì³ñö³. Òîáòî äëÿ ïåðåì³ùåííÿ ô³ãóðè äîñòàòüíüî îäí³º¿ ³íñòðóêö³¿ (äèâ. canvas_03_ElasticFigure.py). Ïî÷íåìî ç³ ñòâîðåííÿ îá'åêòà canvas. Canvas öå îêðåìèé â³äæåò Tkinter òà ñòâîðþºòüñÿ ïîä³áíî ³íøèì â³äæåòàì:
³ì'ÿ_canvas = Canvas(³ì'ÿ_â³êíà_àáî_ôðåéìà, Ñïèñîê_àòðèáóò³â)
Òåïåð ìè ìàºìî çìîãó ñòâîðþâàòè òà ìàëþâàòè ôèãóðè íà öüîìó ïîëîòí³
³ì'ÿ_canvas.create_³ì'ÿ_ô³ãóðè(Ñïèñîê_àòðèáóò³â_ô³ãóðè)
Äî ñêëàäó ô³ãóð, ùî ìîæíà ñòâîðèòè â canvas Tkinter âõîäÿòü:
![]() |
Çíà÷íà ê³ëüê³ñòü àòðèáóò³â, ùî âõîäÿòü äî ñêëàäó canvas òà ô³ãóð íå äîçâîëÿº â ðàìêàõ îáñÿãó ö³º¿ ñòîð³íêè íàäàòè äåòàëüí³ ïîÿñíåííÿ àáî ïðèêëàäè. Òîìó çîñåðåäèìîñÿ ëèøå íà ïðèêëàäàõ ùî îð³ºíòîâàí³ íà òåõí³÷í³ çàäà÷³.
Ïðèêëàäè
|