27
Predmet: OSNOVI RAČUNARSTVA II GUIDE MATLAB-ov alat za kreiranje grafičkog korisničkog interfejsa Autori: Darko Nikčević Igor Đurović Sadržaj 1. Uvod u GUIDE ............................................................................................................. 2 1.1. Layout Editor ................................................................................................ 2 1.2. M-file Editor .................................................................................................. 5 2. Primjer kreiranja GUI-a ................................................................................................ 8 2.1. Unos objekata u Layout Editor-u ................................................................... 8 2.2. Programiranje Callback funkcija ................................................................ 13 2.3. Menu Editor ................................................................................................. 18 2.4. Export ........................................................................................................... 19 3. Kreiranje GUI-a sa dvije ose....................................................................................... 21 Dodatak 1 – Kod fajla primjer.m ................................................................................... 23 Dodatak 2 - Kod fajla crtanje.m...................................................................................... 26 Literatura ......................................................................................................................... 27 1

Predmet: OSNOVI RAČUNARSTVA II GUIDE · 1. Uvod u GUIDE GUIDE je akronim za MATLAB-ov Graphical User Interface Development Environment.To je odličan alat za kreiranje GUI (Graphical

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Predmet: OSNOVI RAČUNARSTVA II GUIDE · 1. Uvod u GUIDE GUIDE je akronim za MATLAB-ov Graphical User Interface Development Environment.To je odličan alat za kreiranje GUI (Graphical

Predmet: OSNOVI RAČUNARSTVA II

GUIDE MATLAB-ov alat za kreiranje grafičkog korisničkog interfejsa

Autori: Darko Nikčević Igor Đurović Sadržaj 1. Uvod u GUIDE ............................................................................................................. 2

1.1. Layout Editor ................................................................................................ 2 1.2. M-file Editor .................................................................................................. 5

2. Primjer kreiranja GUI-a ................................................................................................ 8

2.1. Unos objekata u Layout Editor-u ................................................................... 8 2.2. Programiranje Callback funkcija ................................................................ 13 2.3. Menu Editor ................................................................................................. 18 2.4. Export........................................................................................................... 19

3. Kreiranje GUI-a sa dvije ose....................................................................................... 21

Dodatak 1 – Kod fajla primjer.m ................................................................................... 23 Dodatak 2 - Kod fajla crtanje.m...................................................................................... 26 Literatura......................................................................................................................... 27

1

Page 2: Predmet: OSNOVI RAČUNARSTVA II GUIDE · 1. Uvod u GUIDE GUIDE je akronim za MATLAB-ov Graphical User Interface Development Environment.To je odličan alat za kreiranje GUI (Graphical

1. Uvod u GUIDE GUIDE je akronim za MATLAB-ov Graphical User Interface Development Environment. To je odličan alat za kreiranje GUI (Graphical User Interface – grafički korisnički interfejs) aplikacija. Osnovna karakteristika ovog programa je jednostavan i brz način unošenja, a zatim i podešavanja grafičkih objekata u GUI aplikaciji. Program se startuje naredbom guide sa komandne linije, poslije čega se otvara GUIDE Quick Start dialog prozor (Slika 1.), koji nudi opcije startovanja novih GUI-a ili otvaranja postojećih. Drugi način startovanja programa je opcija File → New→ GUI.

Slika 1. GUIDE Quick Start

1.1. Layout Editor Poslije pritiska na OK, ukoliko je selektovan Blank GUI (default), otvoriće se Layout Editor (Slika 2.). Sa lijeve strane prozora se mogu uočiti sve raspoložive grafičke UI (User Interface) kontrole (objekti), koje se uobičajeno, bez korišćenja GUIDE-a, dobijaju funkcijom uicontrol. To su: Push Button, Toggle Button, Radio Button, Checkbox, Edit Text, Static Text, Slider, Frame, Listbox, Popup Menu i Axes. U MATLAB-ovom File → Preferences prozoru se u dijelu podešavanja GUIDE-a poslije čekiranja Show names in component palette možete dobiti jasniji prikaz raspoloživih objekata - pored svake sličice koja predstavlja određeni objekat se nalazi i njegov naziv (Slika 3.). Velika površina (Layout Area) služi za pozicioniranje objekata, tj. kontrola. Oni se prvo lijevim klikom miša selektuju, odabere se njihova pozicija na Layout Area-i i ponovnim klikom “spuste” na

2

Page 3: Predmet: OSNOVI RAČUNARSTVA II GUIDE · 1. Uvod u GUIDE GUIDE je akronim za MATLAB-ov Graphical User Interface Development Environment.To je odličan alat za kreiranje GUI (Graphical

nju. Klikom miša na postavljene UI kontrole one se selektuju i mogu im se mijenjati dimenzije ili pomjerati u okviru Layout Area.

Slika 2. Layout Editor

Na ovaj način može se unijeti i pozicionirati proizvoljan broj UI kontrola. Layout Editor na ovaj način kreira .fig fajl, koji je veoma značajan za formiranje GUI-a jer sadrži informaciju o poziciji i tekućim osobinama postavljenih kontrola. Moguće je i mijenjati dimenzije Layout Area-e postavljanjem miša iznad crnog kvadratića u donjem desnom uglu i “razvlačenjem” lijevim dugmetom. Na ovaj način se podešavaju dimenzije koje će GUI, tj. .fig fajl, imati poslije startovanja.

Slika 3. Layout Editor sa nazivima objekata

3

Page 4: Predmet: OSNOVI RAČUNARSTVA II GUIDE · 1. Uvod u GUIDE GUIDE je akronim za MATLAB-ov Graphical User Interface Development Environment.To je odličan alat za kreiranje GUI (Graphical

U GUIDE-ovom toolbar-u (Slika 4.) se nalaze ikone, pomoću kojih se na jednostavan način pristupa značajnim alatima.

Slika 4. GUIDE-ov toolbar

Veoma značajna funkcija koju GUIDE sadrži je Align Objects. Ona omogućava jednostavno međusobno poravnanje selektovanih objekata. Najprije se objekti, čiji se međusobni položaj želi poravnati, moraju selektovati, što se radi držanjem tastera Ctrl i selektovanjem željenih objekata, a zatim se aktivira pomenuti alat. Ovim alatom se mogu podešavati i međusobna rastojanja objekata i po horizontali i po vertikali (Slika 5.).

Slika 5. Align Objects prozor

GUIDE sadrži i tzv. Menu Editor (Slika 6.), kojim se vrši unos svih potrebnih menija u toolbar-u kreiranog GUI-a kao i context menija (koji se dobijaju desnim dugmetom miša). Osobine objekata se pregledaju i mijenjaju pomoću tzv. Property Inspector-a, koji se dobija dvostrukim klikom miša na željeni objekat. Drugi način za dobijanje je selektovanjem objekta i biranjem opcije View → Property Inspector, dok je treća mogućnost korišćenjem desnog dugmeta miša i biranjem date opcije iz padajućeg menija. Startovanjem ovog alata se dobija prozor kao na Slici 7. Property Inspector u sebi sadrži i na najbolji mogući način prikazuje sve osobine selektovanog

4

Page 5: Predmet: OSNOVI RAČUNARSTVA II GUIDE · 1. Uvod u GUIDE GUIDE je akronim za MATLAB-ov Graphical User Interface Development Environment.To je odličan alat za kreiranje GUI (Graphical

objekta. Veoma jednostavno, klikanjem miša u prostoru desno od naziva osobina, mogu se mijenjati i njihovi parametri.

Slika 6. Menu Editor

Pojedine osobine koje se prikazuju u Property Inspector-u su grupisane i iako nijesu vidljive u početnom prozoru, mogu se dobiti klikanjem na kvadratić sa znakom +, lijevo od imena date osobine. Neke od osobina mogu imati samo određene vrijednosti, i desno od imena tih osobina nalazi se kvadratić sa strelicom prema dolje. Klikanjem lijevim dugmetom miša na njega dobija se padajući meni koji omogućava izbor tih vrijednosti. Vrlo najznačajnija osobina u početku kreiranja GUI-a je Tag osobina. Kad se neki objekat postavi na Layout Area-u njegova Callback osobina je string %automatic. Promjenom Tag osobine svakom objektu se dodaje odgovarajući string, koji ga na najbolji mogući način opisuje, i koji olakšava prepoznavanje njegovog Callback-a u generisanom .m fajlu (npr. pushbutton1_callback).

1.2. M-file Editor GUIDE u kreiranju GUI-a generiše dva fajla istog imena, ali različite ekstenzije: jedan je već pomenuti .fig, a drugi je .m fajl u koji se upisuju Callback osobine svih postavljenih objekata. Za potpuno funkcionisanje GUI-a neophodno je prvo sve potrebne objekte na Layout Area-i, kao i potrebne menije, podesiti sve njihove osobine na željene vrijednosti (sve ove osobine u ovoj fazi izrade GUI-a čuva .fig fajl), a zatim uobičajenim M-file Editor-om editovati generisani .m fajl, tako što će se definisati Callback osobine za sve unijete objekte. Poslije podešavanja osobina svih unijetih objekata, GUI se startuje biranjem Tools → Run ili klikom na ikonu , koja se nalazi na toolbar-u. Poslije ovoga, GUIDE očekuje davanje imena GUI-u. Isto ime se dodjeljuje i .fig fajlu i njemu odgovarajućem .m fajlu. Poslije startovanja GUI-a otvara se i M-file

5

Page 6: Predmet: OSNOVI RAČUNARSTVA II GUIDE · 1. Uvod u GUIDE GUIDE je akronim za MATLAB-ov Graphical User Interface Development Environment.To je odličan alat za kreiranje GUI (Graphical

Editor koji omogućuje nastavak rada na programiranju GUI-a. Sličan rezultat se dobija izborom File → Save As.

Slika 7. Property Inspector Jednostavno pronalaženje Callback funkcija za unijete objekte vrši se pritiskom na ikonicu f, koja je označena strelicom na Slici 8. Nazive ovih funkcija određuju Tag osobine svih unijetih objekata kojima GUIDE dodaje string _callback (na primjer: pushbutton1_callback). Generisani .m fajl sadrži veliki broj linija sa komentarima koje pružaju pomoć u programiranju. U nastavku će na dva korisna i praktična primjera biti objašnjeno kreiranje GUI-a i programiranje odgovarajućeg .m fajla.

6

Page 7: Predmet: OSNOVI RAČUNARSTVA II GUIDE · 1. Uvod u GUIDE GUIDE je akronim za MATLAB-ov Graphical User Interface Development Environment.To je odličan alat za kreiranje GUI (Graphical

Slika 8. M-file Editor

7

Page 8: Predmet: OSNOVI RAČUNARSTVA II GUIDE · 1. Uvod u GUIDE GUIDE je akronim za MATLAB-ov Graphical User Interface Development Environment.To je odličan alat za kreiranje GUI (Graphical

2. Primjer kreiranja GUI-a U grafičkom prozoru crtaćemo funkciju y=(x-x0)p gdje se parametri p i x0 zadaju preko Edit Text kontrole. Pomoću tri Radio dugmeta ćemo podešavati debljinu linija 1, 2 ili 4. Jedna Edit Text kontrola će nam služiti da preciziramo interval po x osi. Slider kontrolom ćemo podešavati broj tačaka po x osi u granicama od 10 do 1000. Postojaće i Edit Text kontrola, kojom će se unositi isti parametri koji se unose prethodnom Slider kontrolom. Ove dvije kontrole će biti međusobno povezane. Popup menu ćemo koristiti za izbor tipa linija, dok će Pushbutton služiti za zatvaranje prozora. Check dugme nam služi za uključivanje i isključivanje grid-a. Preporučljivo je, odmah na početku, GUI-u dati ime (recimo, primjer) izborom File → Save As. Korisno je i na samom početku unijeti tekst koji će se pojavljivati u zaglavlju otvorenog GUI-a. To se radi pomoću Property Inspector-a tako što se selektuje objekat Figure (lijevim dugmetom miša se klikne na bilo koji vidljivi dio Layout oblasti) i u njegovu osobinu Name unese odgovarajući string.

2.1. Unos objekata u Layout Editor-u Da bi se realizovao ovaj GUI, najprije u Layout Editor-u treba postaviti sve potrebne objekte. Možemo početi od unosa tri Radio Button objekta. Kao što smo već pomenuli, unošenje se vrši na sljedeći način: prvo se izabere odgovarajući objekat sa palete koja se nalazi na lijevoj strani Layout Editor-a (tako što se na njega klikne lijevim dugmetom miša) i potom se izabrani objekat “spusti” na Layout Area-u (tako što se lijevim dugmetom miša klikne na mjesto na koje želimo postaviti željeni objekat). Unesimo tri Radio dugmeta na lijevu stranu Layout Area-e. Pomjeranje objekata se vrši tako što se lijevim dugmetom miša klikne i drži pritisnuto iznad objekta. Pomjeranjem miša pomjera se i odabrani objekat, a otpuštanjem dugmeta objekat se spušta na datu poziciju (Slika 9.). Na ovaj način možemo tri Radio dugmeta poravnati (pomjeranje se vrši u odnosu na grid). Preciznije podešavanje međusobnog položaja vrši se pomenutom funkcijom Align Objects. Sve objekte, čiji se međusobni položaj podešava prvo treba selektovati. To se vrši tako što se lijevim dugmetom miša klikne na svaki od njih uz istovremeno pritisnutu Ctrl tipku na tastaturi. Align Objects se dobija izborom Tools → Align Objects ili klikanjem miša na ikonu, koja se nalazi na toolbar-u. Unešene Radio kontrole treba poravnati kao na sljedećoj slici (treba uočiti izabranu ikonu u dijelu Align Objects prozora koji je označen sa Horizontal – druga u gornjem redu). Poslije ovih radnji, izgled Layout Editor-a bi trebalo da bude kao na Slici 11. Sve Radio kontrole su poravnate. Na ovaj način, treba podesiti međusobni položaj i svih kasnije unešenih objekata. Sad je preporučljivo unijeti neke od najznačajnijih osobina unešenih Radio objekata. To su, prije svega, osobine Tag i String. Pomoću već pomenutog Property Inspector-a ovo se vrši na veoma jednostavan način. Pokazaćemo na primjeru prve Radio kontrole kako se to radi.

8

Page 9: Predmet: OSNOVI RAČUNARSTVA II GUIDE · 1. Uvod u GUIDE GUIDE je akronim za MATLAB-ov Graphical User Interface Development Environment.To je odličan alat za kreiranje GUI (Graphical

Slika 9. Unos tri Radio kontrole na Layout Area-u

Slika 10. Poravnanje Radio kontrola na Layout Area-i

9

Page 10: Predmet: OSNOVI RAČUNARSTVA II GUIDE · 1. Uvod u GUIDE GUIDE je akronim za MATLAB-ov Graphical User Interface Development Environment.To je odličan alat za kreiranje GUI (Graphical

Slika 11. Poravnate Radio kontrole na Layout Area-i Prvo se odgovarajući objekat selektuje lijevim dugmetom miša. Zatim se otvori prozor Property Inspector. Željene osobine se mijenjaju tako što se mišem klikne u polje desno od imena osobine i upiše odgovarajući tekst. Za naš primjer to će biti sljedeći stringovi:

1. Za prvi Radio objekat treba unijeti 1pt u String osobinu (umjesto Radio Button koju je GUIDE automatski dodijelio ovom objektu). Treba uočiti da je GUIDE Tag osobini automatski dodijelio string radiobutton1, koja se može i zadržati, ali bi bolje bilo dodijeliti joj neki string, koji će je bolje opisivati, što će omogućiti i jednostavnije programiranje .m fajla i Callback funkcija, koje tek slijedi. Za ovaj objekat možemo u Tag polje upisati string pushbutton_1pt. Treba učiti da je GUIDE poslije unošenja ove osobine automatski polje Callback promijenio iz %automatic (koje se automatski dobija postavljanjem svakog objekta) u primjer('radiobutton_1pt_Callback',gcbo,[],guidata(gcbo)).

2. Za drugi Radio objekat treba unijeti 2pt u String osobinu i radiobutton_2pt u Tag osobinu. 3. Za treći Radio objekat treba unijeti 4pt u String osobinu i radiobutton_4pt u Tag osobinu.

Grupisanje određenih objekata vrši se pomoću Frame kontrole. Ona se unosi tako što se prvo izabere (lijevim dugmetom miša) i postavi tako što se lijevim dugmetom prvo odredi jedna tačka i potom se pokretanjem miša jednostavno “razvuče” po Layout Area-i. Podrazumijeva se da se lijevo dugme miša otpusti tek pošto se dobiju željene dimenzije unešenog Frame objekta. Novi izled Layout Editor-a bi trebalo da bude kao na Slici 12. Treba uočiti da Frame kontrola prekriva unešene Radio kontrole. Da bi Radio objekti opet bili vidljivi treba desnim dugmetom miša kliknuti na Frame i izabrati opciju Send To Back. Nakon ovoga će unešeni Radio objekti opet biti vidljivi, što je prikazano na Slici 13.

10

Page 11: Predmet: OSNOVI RAČUNARSTVA II GUIDE · 1. Uvod u GUIDE GUIDE je akronim za MATLAB-ov Graphical User Interface Development Environment.To je odličan alat za kreiranje GUI (Graphical

Slika 12. Unos Frame kontrole na Layout Area-i

Slika 13. Frame kontrola postavljena u pozadinu Radio kontrola

11

Page 12: Predmet: OSNOVI RAČUNARSTVA II GUIDE · 1. Uvod u GUIDE GUIDE je akronim za MATLAB-ov Graphical User Interface Development Environment.To je odličan alat za kreiranje GUI (Graphical

Slika 14. Zadavanje 4 moguća tipa linija U prethodnom tekstu je objašnjeno postavljanje pojedinih objekata. Preostali objekti se unose i podešavaju na isti način i to su:

1. Checkbox, koji treba postaviti ispod unešenih Radio Button objekata i koji će biti određen za kontrolu osobine grid. U String osobinu ovog objekta treba unijeti string Grid. Tag osobinu nije potrebno mijenjati jer je ovo jedini Checkbox objekat u ovom primjeru (GUIDE je automatski dodijelio string checkbox1).

2. Push Button, koji treba postaviti ispod prethodno unešenog objekta i u čije String i Tag osobine treba unijeti Close i Dugme, respektivno.

3. Edit Text, koji treba postaviti ispod prethodno unešenog objekta i u čije String i Tag osobine treba unijeti 0 i edit_X0, respektivno.

4. Edit Text, koji treba postaviti ispod prethodno unešenog objekta i u čije String i Tag osobine treba unijeti 1 i edit_P, respektivno.

5. Edit Text, koji treba postaviti ispod prethodno unešenog objekta i u čije String i Tag osobine treba unijeti [-1 1] i edit_XG, respektivno.

6. Static Text, koji treba postaviti lijevo od prvog Edit Text-a. U String osobinu ovog objekta treba unijeti X0=. Tag osobinu ovog objekta nije nužno mijenjati jer ovaj objekat ne mijenja svoj sadržaj i nema Callback funkciju koju treba unijeti.

7. Static Text, koji treba postaviti lijevo od drugog Edit Text-a. U String osobinu ovog objekta treba unijeti P=.

8. Static Text, koji treba postaviti lijevo od trećeg Edit Text-a. U String osobinu ovog objekta treba unijeti XG=.

9. Slider, čija je funkcija podešavanje broja tačaka po x osi u granicama od 10 do 1000. Zbog ovoga, u osobine Min i Max treba unijeti 10 i 1000, respektivno. Treba uočiti da Slider nema String osobinu i da mu je GUIDE automatski kao Tag osobinu dodijelio string slider1. Ovu osobinu nije potrebno mijenjati, jer je to jedini takav objekat u ovom primjeru.

10. Edit Text, koji treba postaviti desno od prethodno unešenog Slider objekta i u čije String i Tag osobine treba unijeti 100 i edit_slider, respektivno. On će prikazivati trenutne vrijednosti Slider objekta, a njegovom promjenom se mogu mijenjati vrijednosti Slider objekta.

11. Axes, koji treba postaviti u gornjem desnom dijelu GUI-a. GUIDE mu automatski dodijeljuje Tag osobinu axes1, koju, obzirom da je jedina osobina ove vrste, nije potrebno mijenjati.

12. Popup Menu, koji ćemo koristiti za izbor tipa linija. U String osobinu treba unijeti različite tipove linija (klikom miša na kvadratić-ikonu desno od teksta String u Property Inspector-u

12

Page 13: Predmet: OSNOVI RAČUNARSTVA II GUIDE · 1. Uvod u GUIDE GUIDE je akronim za MATLAB-ov Graphical User Interface Development Environment.To je odličan alat za kreiranje GUI (Graphical

dobija se prozor koji služi za unos svih mogućnosti padajuće liste - vidi Sliku 14.). Kao i za dva prethodna objekta, Tag osobinu i u ovom slučaju nije potrebno mijenjati.

Poslije unošenja svih gore navedenih objekata izgled Layout Editor-a bi trebalo da izgleda kao na Slici 15. Naravno, poželjno bi bilo koristiti alat Align Objects, za preciznije pozicioniranje objekata.

Slika 15. Konačan izgled Layout Editor-a u našem primjeru

2.2. Programiranje Callback funkcija Poslije unošenja objekata i podešavanja njihovih najznačajnijih osobina, treba pristupiti programiranju .m fajla, što podrazumijeva unošenje Callback-a za sve potrebne objekte. Ukoliko pogledamo Callback funkcije objekata (u M-file Editor-u, pomoću već pomenute ikone f), primjetićemo da sve imaju istu formu, na primjer: % --- Executes on button press in radiobutton_1pt. function radiobutton_1pt_Callback(hObject, eventdata, handles) % hObject handle to radiobutton_1pt (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) Treba uočiti argumente definisane funkcije:

13

Page 14: Predmet: OSNOVI RAČUNARSTVA II GUIDE · 1. Uvod u GUIDE GUIDE je akronim za MATLAB-ov Graphical User Interface Development Environment.To je odličan alat za kreiranje GUI (Graphical

- hObject je handle struktura za objekt čija se Callback funkcija definiše, - eventdata je rezervisani argument za buduće verzije MATLAB-a, - handles argument nam govori da se radi o handles strukturi korišćenih promjenljivih.

Callback funkcije treba unositi ispod ovakvih kodova. Krenimo najprije od podešavanja tzv. Opening Function. Njeno izvršavanje počinje odmah po startovanju GUI-a, prije njegovog pojavljivanja na ekranu. U tom dijelu M-file Editor-a se mogu unijeti sve početne promjenljive i sve neophodne komande za pravilno funkcionisanje GUI-a. Korisno je definisati i sve korisničke handles promjenljive koje će se razmjenjivati između Callback funkcija. U ovom primjeru treba, dakle, poslije koda function primjer_OpeningFcn(hObject, eventdata, handles, varargin) % This function has no output args, see OutputFcn. % hObject handle to figure % eventdata reserved - to be defined in a Cfuture version of MATLAB % handles structure with handles and user data (see GUIDATA) % varargin command line arguments to fun (see VARARGIN) unijeti: handles.tacaka = get (handles.slider1,'Value'); handles.X0 = str2double(get(handles.edit_X0,'String')); handles.P = str2double(get(handles.edit_P,'String')); handles.debljina = 1; val_popupmenu1 = get(handles.popupmenu1,'Value'); string_list_popupmenu1 = get(handles.popupmenu1,'String'); selected_string = string_list_popupmenu1{val_popupmenu1}; handles.vrstalinije = selected_string; handles.XG = str2num(get(handles.edit_XG,'String')); x=linspace(handles.XG(1),handles.XG(2),handles.tacaka); linija=plot(x,(x-handles.X0).^handles.P); set(linija,'LineWidth',handles.debljina,'LineStyle',handles.vrstalinije); Kao što se može uočiti, definisane su sve korisničke handles promjenljive potrebne za pojavljivanje početnog ekrana. Treba ih razlikovati od handles vrijednosti koje nose osobine UI objekata, koje su tipa, recimo, handles.slider1. Ona u sebi sadrži sve osobine odgovarajuće UI kontrole, kojima se može pristupati komandama get i set. Treba uočiti naredbu: guidata(hObject, handles); kojim GUIDE memoriše sve trenutne vrijednosti korisničkih handles promjenljivih kao i handles promjenljivih koje nose informacije o osobinama objekata, koje će se koristiti u nastavku izvršenja programa. Između ostalog, one će se razmjenjivati između Callback funkcija.

14

Page 15: Predmet: OSNOVI RAČUNARSTVA II GUIDE · 1. Uvod u GUIDE GUIDE je akronim za MATLAB-ov Graphical User Interface Development Environment.To je odličan alat za kreiranje GUI (Graphical

Posljednje tri linije gore navedenog koda mogu se ubaciti u novi .m fajl (npr. crtanje.m) kako se ne bi morao u svakoj Callback funkciji unositi ovaj kod, što će poboljšati preglednost .m fajla. Naredni korak je programiranje Callback funkcija unešenih objekata. Počnimo od checkbox1, do koje se najjednostavnije dolazi klikom miša na ikonu f i biranje checkbox1_Callback. Poslije koda % --- Executes on button press in checkbox1. function checkbox1_Callback(hObject, eventdata, handles) % hObject handle to checkbox1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) treba unijeti: handles.grid = get(handles.checkbox1,'value'); if handles.grid == 0 grid off else; grid on end guidata(hObject, handles); Ovdje uvodimo promjenljivu handles.grid kojoj se dodjeljuje trenutna vrijednost Value osobine objekta checkbox1. U nastavku se provjerava njena vrijednost, u zavisnosti od koje se prikazuje ili uklanja grid. Gore navedeni kod treba dodati fajlu crtanje.m poslije već unesenih linija. U nastavku treba unijeti Callback funkcije i za ostale objekte. Treba napomenuti da se za Static Text objekte ne koriste Callback funkcije jer se klikom na njih se ne izvršava nikakva radnja. Možemo nastaviti sa unošenjem Callback funkcije za objekat edit_P. Poslije koda: function edit_P_Callback(hObject, eventdata, handles) % hObject handle to edit_P (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) treba unijeti: handles.P = str2double(get(handles.edit_P,'String')); crtanje guidata(hObject, handles); Slične kodove treba unijeti i kod Callback funkcija za objekte edit_X0 i edit_XG.

15

Page 16: Predmet: OSNOVI RAČUNARSTVA II GUIDE · 1. Uvod u GUIDE GUIDE je akronim za MATLAB-ov Graphical User Interface Development Environment.To je odličan alat za kreiranje GUI (Graphical

Nastavimo unosom Callback funkcija za vezane objekte slider1 i edit_slider. Počnimo od unosa koda za funkciju edit_slider_Callback. Poslije koda: function edit_slider_Callback(hObject, eventdata, handles) % hObject handle to edit_slider (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) treba unijeti: tacaka = str2double(get(handles.edit_slider,'String')); if isnumeric(tacaka) & length(tacaka)==1 & ... tacaka >= get(handles.slider1,'Min') & ... tacaka <= get(handles.slider1,'Max') set(handles.slider1,'Value',tacaka); else handle_wfig=msgbox('Unijeti broj mora biti izmedju 10 i 1000!',... 'Greska','error','modal'); return end handles.tacaka = tacaka; crtanje guidata(hObject, handles); Ovdje treba uočiti i funkciju msgbox koja otvara modalni prozor koji upozorava na grešku u unosu. Nastavimo sa unosom koda za funkciju slider1_Callback. Poslije koda: % --- Executes on slider movement. function slider1_Callback(hObject, eventdata, handles) % hObject handle to slider1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) treba unijeti: set(handles.edit_slider,'String',num2str(get(handles.slider1,'Value'))); handles.tacaka = get(handles.slider1,'Value'); crtanje guidata(hObject, handles); Iz gore navedenih Callback funkcija se može uočiti način programiranja vezanih Edit Box i Slider objekata, što se veoma često koristi u kreiranju GUI-a. Nastavimo sa unosom koda za funkciju popupmenu1_Callback. Poslije: % --- Executes on selection change in popupmenu1.

16

Page 17: Predmet: OSNOVI RAČUNARSTVA II GUIDE · 1. Uvod u GUIDE GUIDE je akronim za MATLAB-ov Graphical User Interface Development Environment.To je odličan alat za kreiranje GUI (Graphical

function popupmenu1_Callback(hObject, eventdata, handles) % hObject handle to popupmenu1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) treba unijeti: val_popupmenu1 = get(handles.popupmenu1,'Value'); string_list_popupmenu1 = get(handles.popupmenu1,'String'); selected_string = string_list_popupmenu1{val_popupmenu1}; handles.vrstalinije = selected_string; crtanje guidata(hObject, handles); Ovo je takođe veoma korisno, jer se na isti način mogu programirati Callback funkcije za ovaj tip objekata. Nastavimo sa unosom koda za funkciju pushbutton_slose_Callback. Poslije: % --- Executes on button press in pushbutton_close. function pushbutton_close_Callback(hObject, eventdata, handles) % hObject handle to pushbutton_close (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) treba unijeti: exit_button=questdlg('Exit Now?','Exit Program','Yes','No','No'); switch exit_button case 'Yes' delete(handles.figure1) case 'No' return end Ovdje treba uočiti način korišćenja funkcije questdlg i switch-case naredbe. Na kraju, na primjeru jednog radio objekta može se pokazati način njegovog programiranja. Poslije: % --- Executes on button press in radiobutton_1pt. function radiobutton_1pt_Callback(hObject, eventdata, handles) % hObject handle to radiobutton_1pt (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)

17

Page 18: Predmet: OSNOVI RAČUNARSTVA II GUIDE · 1. Uvod u GUIDE GUIDE je akronim za MATLAB-ov Graphical User Interface Development Environment.To je odličan alat za kreiranje GUI (Graphical

treba unijeti: set(handles.radiobutton_1pt, 'Value', 1); set(handles.radiobutton_2pt, 'Value', 0); set(handles.radiobutton_4pt, 'Value', 0); handles.debljina = 1; crtanje guidata(hObject, handles);

2.3. Menu Editor GUIDE omogućava i veoma jednostavan način unosa menija u toolbar. Ovo se vrši pomoću tzv. Menu Editor-a, koji se dobija izborom Tools → Menu Editor. Poslije ove komande otvara se prozor koji je prikazan na Slici 6. Dodavanje menija se vrši klikom na ikonu u gornjem lijvom uglu Menu Editor-a. Poslije ovoga se dobija izgled kao na Slici 16. Mišem se klikne na Untitled1 poslije čega se na desnoj strani prozora pojave razne mogućnosti za podešavanje menija. U polje Label se unosi string koji se pojavljuje na toolbaru, a u polju Tag se unosi string koji određuje ime Callback funkcije, koju tek treba unijeti. U našem primjeru ćemo demonstrirati unos menija koji će određivati boju linije. Klikanjem na ikonu desno od ikone označene strelicom dodaju se podmeniji. Unijećemo izbor za, na primjer, četiri boje: Blue (poslije unosa ove komponente treba čekirati polje Item is checked), Red, Green i Yellow. Tag osobine možemo označiti sa lineblue, linered, linegreen i lineyellow, respektivno.

Slika 16. Dodavanje menija u Menu Editor-u

18

Page 19: Predmet: OSNOVI RAČUNARSTVA II GUIDE · 1. Uvod u GUIDE GUIDE je akronim za MATLAB-ov Graphical User Interface Development Environment.To je odličan alat za kreiranje GUI (Graphical

Na kraju je potrebno još programirati Callback-ove za unesene podmenije. Prije ovoga je potrebno u primjer_OpeningFcn unijeti kod: handles.linecolor = 'blue'; jer je to podrazumijevana (default) boja za crtanje linija u MATLAB-u. Nastavimo sa unosom. Poslije koda: % -------------------------------------------------------------------- function lineblue_Callback(hObject, eventdata, handles) % hObject handle to lineblue (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) treba unijeti: handles.linecolor = 'blue'; set(handles.lineblue,'Checked','on') set(handles.linered,'Checked','off') set(handles.linegreen,'Checked','off') set(handles.lineyellow,'Checked','off') crtanje guidata(hObject, handles); Sličan kod se unosi i za ostale Callback funkcije unešenih podmenija. 2.4. Export Ovako kreirani .fig i .m fajlovi mogu funkcionisati samo u okviru GUIDE-a. Izborom File → Export dobija se jedan .m fajl koji funkcioniše samostalno, izvan GUIDE-a. GUIDE mu automatski dodjeljuje ime primjer_export.m. Poslije unosa svih Callback funkcija, startovanjem GUI-a trebalo bi da se dobije prozor kao na sljedećoj slici. Ovim je na prilično jednostavan način, kreiran zadati GUI. Iako postoji još puno mogućnosti i najrazličitijih podešavanja, ovaj primjer i način na koji je realizovan, na prilično jednostavan način otvaraju vrata budućim korisnicima GUIDE-a. Ukoliko se javi potreba za dodatnim alatkama u literaturi na kraju ovog rada navedena je odlična literatura koja detaljnije objašnjava rad sa GUIDE-om i generalno sa GUI-ima.

19

Page 20: Predmet: OSNOVI RAČUNARSTVA II GUIDE · 1. Uvod u GUIDE GUIDE je akronim za MATLAB-ov Graphical User Interface Development Environment.To je odličan alat za kreiranje GUI (Graphical

Slika 17. Izgled konačne GUI aplikacije za crtanje zadate krive

20

Page 21: Predmet: OSNOVI RAČUNARSTVA II GUIDE · 1. Uvod u GUIDE GUIDE je akronim za MATLAB-ov Graphical User Interface Development Environment.To je odličan alat za kreiranje GUI (Graphical

3. Kreiranje GUI-a sa dvije ose U slučaju da kreirate GUI sa više osa mora se voditi računa o tome koje su ose trenutno aktivne odnosno podložne naredbi za crtanje. Kao primjer smo iskoristili GUI koji iscrtava signal u frekventnom i vremenskom domenu. Preko edit box-ova program prima frekvencije dvije sinusoide u signalu, dok treća edit kontrola se koristi da bi zadali granice signala u formatu početak:inkrement:kraj. Layout ovog GUI-a je prikazan na Slici 18. Uočljivo je da postoje dvije ose i da može postojati problem u tome koja od ove dvije ose će biti aktivna, odnosno na koju će se odnositi naredbe za crtanje. Za predmetni GUI su neophodne tri vrijednosti: frekvencije (f1 i f2) kao i vremenska koordinata t. Kada korisnik klikne na Plot dugme MATLAB koristi ove vrijednosti i računa izraz: x=sin(2*pi*f1*t)+sin(2*pi*f2*t); Podaci o prvoj frekvenciji se nalaze u edit polju f1 kome smo dodijeli Tag osobinu f1_input, dok se podaci o drugoj frekvenciji nalaze u polju f2 sa Tag-om f2_input. Vrijeme u formatu: početak:inkrement:kraj se unosi u trećoj edit kontroli koja ima Tag - t_input. Pored ovoga u okviru GUI-a nalazi se Plot dugme koje izvršava naredbe za crtanje. Da bi se naredbe za crtanje obavile neophodno je bilo postaviti odgovarajuće Tag-ove za frekvencijske (gornji crtež) i vremenske ose (donji crtež). Ova dva crteža su respektivno dobili Tag-ove: frequency_axes i time_axes. Da bi se vremenske ose učinile aktivnim potrebno je da odredimo naredbu: axes(handles.time_axes) odnosno slična naredba bi se izvršila za frekvencijske ose. Callback koji je asociran sa dugmetom Plot može da ima sljedeći oblik: function varargout = plot_button_Callback(h, eventdata, ... handles, varargin) f1 = str2double(get(handles.f1_input,'String')); f2 = str2double(get(handles.f2_input,'String')); t = eval(get(handles.t_input,'String')); x = sin(2*pi*f1*t) + sin(2*pi*f2*t); y = fft(x,512); m = y.*conj(y)/512; f = 1000*(0:256)/512;; axes(handles.frequency_axes) plot(f,m(1:257)) set(handles.frequency_axes,'XMinorTick','on') grid on axes(handles.time_axes) plot(t,x) set(handles.time_axes,'XMinorTick','on') grid on Napominjemo da predmetni GUI ne realizuje Callback-ove ostalih kontrola, ali da se to može provesti jednostavnim pozivanjem funkcije za Plot dugme. Pokušajte sami da protumačite kod ove funkcije. Jedina stvar koju je po našem mišljenju neophodno objasniti, pošto nije jasna sama po sebi, su dvije naredbe tipa: set(handles.frequency_axes,'XMinorTick','on')

21

Page 22: Predmet: OSNOVI RAČUNARSTVA II GUIDE · 1. Uvod u GUIDE GUIDE je akronim za MATLAB-ov Graphical User Interface Development Environment.To je odličan alat za kreiranje GUI (Graphical

Neophodno je da se ovaj korak ponovo odradi, pošto mnoge naredbe za crtanje, kao što je naredna plot, brišu prethodne ose, pa je neophodno vratiti mrežu na grafik i oznake na osama (podebljane linije na mjestima gdje se linije mreže spajaju sa osama grafika). Napominjemo da se ništa strašno neće dogoditi ni ako se ova naredba ne uvrsti. Naredbu fft nećemo objašnjavati već samo napominjemo da se ova i slične naredbe koriste za dobijanje spektralnog (frekvencijskog) sadržaja signala. U našem slučaju, za signal oblika zbira dvije sinusoide, sa različitim frekvencijama, trebalo bi da fft da signal koji ima jasno vidljiva dva maksimuma. Svi ostali detalji ovog programa mogu se pronaći u fajlu two_axes.m koji dolazi uz verziju MATLAB 7.

Slika 18. GUI aplikacija za prikaz sume dvije sinusoide u vremenu i frekvenciji

22

Page 23: Predmet: OSNOVI RAČUNARSTVA II GUIDE · 1. Uvod u GUIDE GUIDE je akronim za MATLAB-ov Graphical User Interface Development Environment.To je odličan alat za kreiranje GUI (Graphical

Dodatak 1 - Kod fajla primjer.m Dat je kompletan kod ovog fajla, pri čemu su izbrisani svi komentari radi preglednosti. function varargout = primjer(varargin) gui_Singleton = 1; gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ... 'gui_OpeningFcn', @primjer_OpeningFcn, ... 'gui_OutputFcn', @primjer_OutputFcn, ... 'gui_LayoutFcn', [], ... 'gui_Callback', []); if nargin & isstr(varargin{1}) gui_State.gui_Callback = str2func(varargin{1}); end if nargout [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); else gui_mainfcn(gui_State, varargin{:}); end function primjer_OpeningFcn(hObject, eventdata, handles, varargin) handles.tacaka = get (handles.slider1,'Value'); handles.X0 = str2double(get(handles.edit_X0,'String')); handles.P = str2double(get(handles.edit_P,'String')); handles.debljina = 1; val_popupmenu1 = get(handles.popupmenu1,'Value'); string_list_popupmenu1 = get(handles.popupmenu1,'String'); selected_string = string_list_popupmenu1{val_popupmenu1}; handles.vrstalinije = selected_string; handles.XG = str2num(get(handles.edit_XG,'String')); handles.linecolor = 'blue'; x=linspace(handles.XG(1),handles.XG(2),handles.tacaka); linija=plot(x,(x-handles.X0).^handles.P); set(linija,'LineWidth',handles.debljina,'LineStyle',handles.vrstalinije,... 'Color',handles.linecolor); handles.output = hObject; guidata(hObject, handles); function varargout = primjer_OutputFcn(hObject, eventdata, handles) varargout{1} = handles.output; function radiobutton_1pt_Callback(hObject, eventdata, handles) set(handles.radiobutton_1pt, 'Value', 1); set(handles.radiobutton_2pt, 'Value', 0); set(handles.radiobutton_4pt, 'Value', 0); handles.debljina = 1; crtanje guidata(hObject, handles); function radiobutton_2pt_Callback(hObject, eventdata, handles) set(handles.radiobutton_1pt, 'Value', 0); set(handles.radiobutton_2pt, 'Value', 1);

23

Page 24: Predmet: OSNOVI RAČUNARSTVA II GUIDE · 1. Uvod u GUIDE GUIDE je akronim za MATLAB-ov Graphical User Interface Development Environment.To je odličan alat za kreiranje GUI (Graphical

set(handles.radiobutton_4pt, 'Value', 0); handles.debljina = 2; crtanje guidata(hObject, handles); function radiobutton_4pt_Callback(hObject, eventdata, handles) set(handles.radiobutton_1pt, 'Value', 0); set(handles.radiobutton_2pt, 'Value', 0); set(handles.radiobutton_4pt, 'Value', 1); handles.debljina = 4; crtanje guidata(hObject, handles); function checkbox1_Callback(hObject, eventdata, handles) handles.grid = get(handles.checkbox1,'value'); if handles.grid == 0 grid off else; grid on end guidata(hObject, handles); function pushbutton_close_Callback(hObject, eventdata, handles) exit_button=questdlg('Exit Now?','Exit Program','Yes','No','No'); switch exit_button case 'Yes' delete(handles.figure1) case 'No' return end function edit_X0_CreateFcn(hObject, eventdata, handles) called if ispc set(hObject,'BackgroundColor','white'); else set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor')); end function edit_X0_Callback(hObject, eventdata, handles) handles.X0 = str2double(get(handles.edit_X0,'String')); crtanje guidata(hObject, handles); function edit_P_CreateFcn(hObject, eventdata, handles) called if ispc set(hObject,'BackgroundColor','white'); else set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor')); end function edit_P_Callback(hObject, eventdata, handles) handles.P = str2double(get(handles.edit_P,'String')); crtanje guidata(hObject, handles); function edit_XG_CreateFcn(hObject, eventdata, handles)

24

Page 25: Predmet: OSNOVI RAČUNARSTVA II GUIDE · 1. Uvod u GUIDE GUIDE je akronim za MATLAB-ov Graphical User Interface Development Environment.To je odličan alat za kreiranje GUI (Graphical

called if ispc set(hObject,'BackgroundColor','white'); else set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor')); end function edit_XG_Callback(hObject, eventdata, handles) handles.XG = str2num(get(handles.edit_XG,'String')); crtanje guidata(hObject, handles); function slider1_CreateFcn(hObject, eventdata, handles) called usewhitebg = 1; if usewhitebg set(hObject,'BackgroundColor',[.9 .9 .9]); else set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor')); end function slider1_Callback(hObject, eventdata, handles) set(handles.edit_slider,'String',... num2str(get(handles.slider1,'Value'))); handles.tacaka = get(handles.slider1,'Value'); crtanje guidata(hObject, handles); function popupmenu1_CreateFcn(hObject, eventdata, handles) called if ispc set(hObject,'BackgroundColor','white'); else set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor')); end function popupmenu1_Callback(hObject, eventdata, handles) val_popupmenu1 = get(handles.popupmenu1,'Value'); string_list_popupmenu1 = get(handles.popupmenu1,'String'); selected_string = string_list_popupmenu1{val_popupmenu1}; handles.vrstalinije = selected_string; crtanje guidata(hObject, handles); function edit_slider_CreateFcn(hObject, eventdata, handles) called if ispc set(hObject,'BackgroundColor','white'); else set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor')); end function edit_slider_Callback(hObject, eventdata, handles) tacaka = str2double(get(handles.edit_slider,'String')); if isnumeric(tacaka) & length(tacaka)==1 & ... tacaka >= get(handles.slider1,'Min') & ... tacaka <= get(handles.slider1,'Max') set(handles.slider1,'Value',tacaka); else

25

Page 26: Predmet: OSNOVI RAČUNARSTVA II GUIDE · 1. Uvod u GUIDE GUIDE je akronim za MATLAB-ov Graphical User Interface Development Environment.To je odličan alat za kreiranje GUI (Graphical

handle_wfig=msgbox('Unijeti broj mora biti izmedju 10 i 1000!',... 'Greska','error','modal'); return end handles.tacaka = tacaka; crtanje guidata(hObject, handles); function linecolor_Callback(hObject, eventdata, handles) function lineblue_Callback(hObject, eventdata, handles) handles.linecolor = 'blue'; set(handles.lineblue,'Checked','on') set(handles.linered,'Checked','off') set(handles.linegreen,'Checked','off') set(handles.lineyellow,'Checked','off') crtanje guidata(hObject, handles); function linered_Callback(hObject, eventdata, handles) handles.linecolor = 'red'; set(handles.lineblue,'Checked','off') set(handles.linered,'Checked','on') set(handles.linegreen,'Checked','off') set(handles.lineyellow,'Checked','off') crtanje guidata(hObject, handles); function linegreen_Callback(hObject, eventdata, handles) handles.linecolor = 'green'; set(handles.lineblue,'Checked','off') set(handles.linered,'Checked','off') set(handles.linegreen,'Checked','on') set(handles.lineyellow,'Checked','off') crtanje guidata(hObject, handles); function lineyellow_Callback(hObject, eventdata, handles) handles.linecolor = 'yellow'; set(handles.lineblue,'Checked','off') set(handles.linered,'Checked','off') set(handles.linegreen,'Checked','off') set(handles.lineyellow,'Checked','on') crtanje guidata(hObject, handles); Dodatak 2 - Kod fajla crtanje.m x=linspace(handles.XG(1),handles.XG(2),handles.tacaka); linija=plot(x,(x-handles.X0).^handles.P); set(linija,'LineWidth',handles.debljina,...

'LineStyle',handles.vrstalinije,'Color',handles.linecolor); handles.grid = get(handles.checkbox1,'value'); if handles.grid == 0 grid off else; grid on end

26

Page 27: Predmet: OSNOVI RAČUNARSTVA II GUIDE · 1. Uvod u GUIDE GUIDE je akronim za MATLAB-ov Graphical User Interface Development Environment.To je odličan alat za kreiranje GUI (Graphical

Literatura

1. MATLAB Creating Graphical User Interfaces - The MathWorks, Inc., mart 2005. 2. Graphics and GUIs with MATLAB, 3rd Ed (Patrick Marchand & O. Thomas Holland) -

CRC Press, 2003.

3. MATLAB FOR WINDOWS (Zdravko Uskoković, Ljubiša Stanković & Igor Đurović) – Univerzitet Crne Gore, 1998.

27