Podrška za GUI u Pythonu

zoran_hercigonja

Zoran Hercigonja

Sažetak

Učenje programiranja je samo po sebi izuzetno zahtjevno jer zahtijeva određenu razinu apstraktnog razmišljanja, zahtijeva razne vještine. Savladavanje koncepta objektno orijentiranog programiranja je još teže za razumijevanje i usvajanje. Budući da su grafička sučelja vrlo bliska i razumljiva javnosti, predlaže se da se i učenje složenijih koncepata u Python programiranju izvede kroz programiranje GUI. Vizualizacija pojedinih programskih rješenja kroz koncept objektno orijentiranog programiranja, trebala bi omogućiti kvalitetnije usvajanje znanja. Iz istog se razloga u radu nudi rješenje za usvajanje koncepta objektno orijentiranog programiranja kroz podršku za GUI programiranje u Pythonu. Grafičko korisničko sučelje bi trebalo ubrazati učenje programiranja i omogućiti savladavanje osnovnih koncepata programiranja.

Ključne riječi: GUI, Python, Tkinter, programiranje, vizualizacija

Uvod

U sklopu projekta razvoja novog kurikuluma u području računalstva i računalnog inženjerstva nastavnici su prošli osposobljavanje u području objektno-orijentiranog programiranja [1]. To znači da će se u nastavu informatike uskoro uvesti koncept objektno-orijentiranog programiranja. Pod objektno orijentiranim programiranjem podrazumijeva se metoda programiranja kojom se definiranje neke klase vrši korištenjem svojstava postojećih klasa [2]. To u nastavku znači da će se korištenjem programiranih svojstava jednog programskog konstrukta kao što je klasa, ta ista svojstva moći uključiti u druge dijelove koda. Takav koncept programiranja je vrlo zahtjevan i zahtijeva puno učenja i stjecanja vještina. Velika pomoć u učenju objektno-orijentiranog programiranja jest vizualizacija rezultata programiranja. Budući da gotovo sve aplikacije imaju svoja sučelja izvedena kroz grafičko korisničko sučelje, ideja je da se koncept objektno-orijentiranog programiranja približi što je više moguće osobama koje po prvi puta programiraju na taj način. Isto tako učenici su naviknuti služiti se različitim korisničkim sučeljima pa stoga i lakše razumiju funkcioniranje takvih sučelja. Objektno orijenitranim programiranjem grafičkog korisničkog sučelja, bilo bi lakše usvojiti objektno orijentirane koncepte nego uobičajenim sučeljima gdje se ispisuju rezultati u linijskom prikazu. U vizualnom smislu, učenicima je programski primjer jasniji kada ga se može grafički predočiti. Primjerice Visual Basic i C# kao jezici za objektno orijentirano programiranje imaju vrlo kvalitetnu podršku za GUI i prije svega od velike su pomoći u usvajanju konceptata objektno orijentiranog programiranja. Zbog potrebe da se koncept objektno orijentiranog programiranja učini shvatljivijim i jednostavnijim programiranjem u programskom jeziku Python, u radu se predlaže podrška za GUI u Python programskom jeziku.

Tkinter modul – podrška za GUI u Pythonu

Tkinter modul ili “Tk sučelje” je standardno Python GUI sučelje. Razvijen je kao GUI produženje roka za Tcl skriptni jezik kreiran od strane Johna Ousterhoutea. Prvo izdanje Tkintera je bilo davne 1991. godine. Tkinter se pokazao kao izuzetno uspješan u 1990-ima, jer je omogućio lakše savladavanje Python programiranja za razliku od drugih alata [1]. GUI (eng. graphical user interface) grafičko korisničko sučelje je način interakcije čovjeka s računalom kroz manipulaciju grafičkim elementima i dodacima uz pomoć tekstualnih poruka i obavijesti [2].

GUI programi prikazuju vizualne elemente poput [2]:

  • ikona (sličice na desktopu, tj. pozadini)
  • prozora
  • tipke s tekstom i/ili slikama
  • okviri za unos teksta
  • kvadratići za odabir i tipa (moguće je odabrati više kvadratića – eng. check box)
  • kružići za odabir ili tipa (moguće je odabrati samo jedan kružić – eng. radio button)

Tkinter modul je dostupan za većinu Unix platformi, ali i za Windows i Macintosh platforme. Sastoji se od niza modula. Tkinter sučelje je binarna ekstenzija modula pod nazivom _tkinter. Ovaj modul sadrži sučelje niske razine koje se ne može uspoređivati s vodećim sučeljima na mobilnim i drugim aplikacijama. [3]

imageSlika 1. Python Tkinter sučelje

Za korištenje Tkintera, sve što je potrebno je uvesti Tkinter modul pozivajući ga sa sljedećom naredbom:

image

Slika 2. Naredba za poziv Tkinter modula

Tkinter modul kao svojevrsna nadogradnja Python programskog jezika, donosi mogućnosti kreiranja vizualnih elemenata poput ikona i različitih imagedijaloških okvira. Korisnik može pomoću ispisanog programskog koda u editoru za pisanje istog, kreirati dijaloški okvir s ikonama, tipkama s određenom funkcionalnosti.

Slika 3. Primjer kreiranog prozora s funkcionalnim tipkama u Python Tkinter modulu

Python Tkinter modul, sastoji se od tri skupine programa koji omogućavaju rad s dijaloškim okvirima i prozorima, ikonama i tipkama s određenom funkcionalnosti. Skupine programa su sljedeće [3]:

  • notebook
  • tk_optionMenu
  • panedwindow
  • progressbar
  • radiobutton
  • scale
  • scrollbar
  • separator
  • sizegrip
  • spinbox
  • text
  • treeview

Skupina programa za kreiranje prozora i određivanje funkcionalnosti tipke i ikona:

  • button
  • canvas
  • checkbutton
  • combobox
  • entry
  • frame
  • label
  • labelframe
  • listbox
  • menu
  • menubutton
  • message

Programi za rad s dijaloškim okvirima:

  • tk_chooseColor – pojava dijaloškog okvira za odabir boje
  • tk_chooseDirectory – pojava dijaloškog okvira za odabir direktorija
  • tk_dialog – stvaranje dijaloga i čekanje odgovora
  • tk_getOpenFile – dijaloški okvir za učitavanje datoteke za otvaranje
  • tk_getSaveFile – dijaloški okvir za učitavanje datoteke za spremanje na Python editoru
  • tk_messageBox – iskakanje prozora poruke
  • tk_popup – kreiranje skočnog izbornika.

Programi za geometrijsko oblikovanjeimage :

  • place
  • grid
  • pack

Slika 4. Primjer programa u Tkinter modulu za ispis pozdravne poruke „Hello Tkinter!“ [4]

Programiranje u Tkinter modulu, nije ništa drugačije od uobičajenog programiranja u Pythonu. Uz korištenje standardnih funkcija uvjetovanja, grananja i petlji, potrebno je uključiti neki program iz navedene skupine programa za dijaloške okvire, prozore, tipke i ikone. Primjerice u programu na slici 4 je napravljen uvoz Tkinter modula kroz naredbu „From Tkinter import *“. Na taj način su se u Python programski editor uključile sve tri skupine navedenih programa. Drugi korak nakon uključivanja modula je inicijalizacija varijable odnosno u ovom slučaju prozora u kojem će se ispisati pozdravna poruka„Hello Tkinter!“. U odsječku programa na slici 4 to je izgledalo kao „root = Tk()“ pri čemu je „Tk“ skraćenica za Tkinter. Time je pripremljeno područje za kreiranje prozora s porukom. Sljedeći dio koda se odnosi na kreiranje oznake (Label). Oznaka „Label“ smještena je u varijablu naziva „w“. Dakle linija koda izgleda ovako: „w=Label(root, text= „Hello Tkinter!““. Prvi parametar oznake „Label“ je naravno naziv prozora (root u ovom slučaju). Drugi parametar je tekst koji će biti ispisan u prozoru (Hello Tkinter!). Za ispisivanje prozora s porukom, potrebno je odrediti metodu s kojom će se okvir prozora prilagoditi tekstu. Na primjeru koda na slici 4 rabi se naredba „w.pack()“. Tom imagenaredbom se odredilo da okvir prozora bude prilagođen ispisu teksta.

Slika 5. Primjer prozora s ispisom poruke „Hello Tkinter!“

Na kraju je potrebno još postaviti naredbu koja će omogućiti prikazivanje prozora s ispisom poruke tako dugo dok korisnik ne pritisne tipku enter. Za to je korištena naredba „root.mainloop()“. Pokretanjem napisanog programa dobio bi se prozor s porukom kao na slici 5.

Priprema testiranja i rezultati

Učenici su na satu izborne nastave informatike koristili funkcionalnosti Tkinter modula. Za rad je utrošeno ukupno četiri (4) sata od kojih je jedan dva sata utrošeno na upoznavanje Tkinter modula. Na izradi testnog zadatka, sudjelovalo je četiri para učenika koji su se dobrovoljno javili za izradu zadatka (radilo se o učenicima s osrednjim znanjem objektno-orijentiranog programiranja). Učenici su prisustvovali izradi istog zadatka u parovima. Radilo se o mješovitoj grupi sastavljenoj od 1., 2., i 3. Razreda. U svrhu testiranja i utvrđivanja kvalitete Tkinter modula, određeni su sljedeći kriteriji. Trebalo je koristiti sve tri grupe programa Tkinter modula (geometrijsko raspoređivanje, rad s prozorima i tipkama.). Bilo je potrebno kreirati prozor čiji će okvir biti prilagodljiv zadanom ispisu. Prozor je trebao sadržavati tekst u točno pet redaka, kojima se prilagođava okvir prozora. Paralelno s tekstom, trebalo je smjestiti sliku u .GIF formatu. Uz tekst, trebalo je uključiti SlideBar elemente koji će omogućiti kretanje po tekstu gore-dolje. I na kraju u desni kut prozora, trebalo je uključiti tipku za proizvoljno učitavanje dokumenta čije će se ime zapamtiti u Python programskom editoru.

tablicaTablica 1. Kriteriji za testiranje

Za kreiranje prozora prema zadanim kriterijima, bilo je potrebno osmisliti dva odvojena programska koda koji su se kasnije spojili u jedno rješenje. Prvo je kreiran prozor i ubačen tekst i slika. Zatim je u isti kod dodana funkcionalnost pomicanja teksta gore-dolje (Slidebar). Za početak, uključen je Tkinter modul From Tkinter import*. Nakon toga, inicijalizirana je varijabla za prozor pod nazivom „root“. Nakon kreiranja prozora za ispis teksta, bilo je potrebno oblikovati tekst. Za tekst je kreirana varijabla „text1“ za naslov i „text2“ za ostatak tekstualnog sadržaja. Uz obje varijable, uključeni su programski dodaci iz modula Tkinkter.

imageSlika 6. Kreiranje prozora s ispisom teksta i slike

Tekst je pomaknut skroz uz desni rub prozora. Prvi redak teksta je naslov otisnut crnim slovima veličine 12px. Ostatak teksta je fonta 10px. U tekstu je određen font, veličina fonta i opcija za podebljanje i ukošavanje (text2.tag_configure(‘bold_italics’, font=(‘Arial’, 12, ‘boimageld’, ‘italic’))).Isto tako, dodana je linija koda za učitavanje slike: photo=PhotoImage(file=’200_s.gif). Nakon dodavanja slike, bilo je potrebno dodati i SlideBar za pomicanje teksta gore-dolje. On je izveden naredbom scroll = Scrollbar(root, command=text2.yview).

Slika 7. Kreiran prozor s ispisom teksta i slike

Slika 7 prikazuje upravo kreiran prozor prema navedenim kriterijima iz tablice 1. Kreiran prozor sadržava sliku .GIF formata, tekst u pet redaka sa SlideBaro-om. U drugom dijelu koda, bilo je potrebno prilagoditi prozor s mogućnošću učitavanja dokumenta i zapisivanja na Python editor preko tipke.

imageSlika 8. Kreiranje tipke sa funkcionalnosti učitavanja dokumenta i njegovog zapisivanja na Python editor

U drugom dijelu koda, bilo je potrebno uključiti i programsku naredbu „form tkFileDialog import askopenfilename“ koja se nalazila u grupi programa za rad s dijaloškim okvirima. Nakon toga, pozivana je metoda „callback()“ koja je omogućila otvaranje prozora za učitavanje dokumenata. Uz to iz grupe programa za rad s tipkama, uključena je i tipka pod nazivom „File open“ s funkcijom otvaranja prozora za učitavanje datoteke. Korištena je naredba „Button(text=’File Open’“, comand=callback).pack(fill=X)“. Taj dio koda je uključen u ostatak koda za kreiranje prozora i ispisivanje timageeksta i slike. Spajanjem oba dijela koda, na slici 9, vidljivo je dodavanje tipke za učitavanje dokumenta.

Slika 9: Dodavanje tipke za učitavanje dokumenata

Konačno programsko rješenje s uključenim Tkinter modulom je omogućilo uz ispisivanje teksta i slike i učitavanje dokumenata i upisivanje njegovog imena u Python editor kao što je prikazano na slici 10.

imageSlika 10. Učitavanje naziva dokumenta u Python editor

Učenici su u radu bili vrlo uspješni. Testni zadatak je uspješno ispunjen. Svi kriteriji zadani u tablici 1 su ispunjeni. Prilikom kreiranja programskog rješenja, bilo je potrebno više puta uključivati dodatne programe iz grupe programa Tkinter modula što je predstavljalo omanji problem učenicima te je stoga bilo potrebno napraviti i nekoliko intervencija od strane nastavnika. Osim uključivanja, bilo je potrebno i inicijalizirati pokoju varijablu te pozvati metodu. Iako se radilo o konceptu objektno-orijenitranog programiranja; programiranje samo po sebi nije bilo izuzetno zahtjevno. Velika pomoć je učenicima bila upravo vizualno sučelje na kojem se mogao provjeriti svaki pojedini korak. Programiranje putem grafičkog sučelja omogućilo je povezivanje dobivenog grafičkog rezultata sa svakim korakom pisanja programskog koda. To je velika prednost jer korisnik može svaku promjenu u kodu vidjeti kao vizualnu promjenu na grafičko sučelju.

Zaključak

Ovim radom, demonstrirane su mogućnosti objektno orijentiranog programiranja pomoću podrške Tkinter modula za GUI u Pythonu. Prikazani su primjeri korištenja tri skupine programa za oblikovanje prozora, tipki i opadajućih listi te geometrijskog oblikovanja. Prethodno demonstrirani samostalni primjeri GUI sučelja, objedinjeni su pod testnim zadatkom u jedno zajedničko grafičko rješnje. Pritom su korištene metode u programiranju i naredbe zaobradu teksta, slike i geometrijskog rasporeda teksta i slike unutar prozora. Testirana je i mogućnost dodavanja SlideBar-a. Programiranjem svih tih instanci, dobilo se jedno kvalitetno rješenje u obliku prozora s ispisom teksta i slike i SlideBar-om s kojim se taj isti sadržaj prozora može pomicati. Python kao sintaktički vrlo jednostavan jezik za programiranje, dokazao je i svoju jednostavnost kroz Tkinter modul podrške za GUI. Velika prednost korištenja ovog modula je prije svega fluidnost pisanja programskog koda što su potvrdili i sami učenici svojim radom. Učenje koncepta objektno orijentiranog programiranja u Pythonu preko GUI sučelja, trebalo bi učenicima preko vizualizacije rezultata taj koncept učiniti razumljiviji i jednostavnijim za shvaćanje i daljnjim kreativnim radom.

Literatura

  1. Stranica Tehničke škola Ruđera Boškovića [pristupano 04.01.2017.]
  2. FESB skripta objektno-roijentiranog programiranja [pristupano 07.01.2017.]
  3. Kratka povijest Python Tkintera [pristupano 04.01.2017.]
  4. Wikipedija-grafičko korisničko sučelje [pristupano 07.01.2017.]
  5. Službena stranica Python Tkintera [pristupano 07.01.2017.]
  6. Python Tkinter primjeri [pristupano 07.06.2016.]
Oglasi

O autoru Pogled kroz prozor

Digitalni časopis za obrazovne stručnjake, pišu ga učitelji i nastavnici.
Ovaj unos je objavljen u Programiranje i označen sa , , , , , . Bookmarkirajte stalnu vezu.