30. Matlab – GUI 1. začíname

04. Marec, 2011, Autor článku: Foltin Martin, Informačné technológie, MATLAB/Comsol
Ročník 4, číslo 3 This page as PDF Pridať príspevok

Dnes otvárame ďalšiu rozsiahlu kapitolu prostredia Matlab. Jedná sa o grafické používateľské rozhranie – GUI (graphical user interface). Kapitola bude rozdelená do niekoľko častí, keďže sa jedná o problematiku náročnú a do značnej miery aj rozsiahlu. Budeme sa snažiť postupovať po malých krokoch a radšej niektoré časti zopakujeme, s cieľom správneho pochopenia.

V dnešnej časti si ukážeme, ako GUI vytvoriť, ako doň pridať aktívne prvky a ako ich programovo prepojiť. Bude sa jednať o jednoduchý program, kde bude prepojené textové pole s posuvníkom (slider). Okno aplikácie by teda mohlo vyzerať asi takto (obr. 1).


Obr. 1 Grafický návrh aplikácie

Zapnime teda Matlab a spustime vývojové prostredie pre GUI. Z menu File zvolíme položku New a GUI.


Obr. 2 Spustenie vývojárskeho prostredia pre GUI

Zo sprievodcu zvolíme položku Blank GUI (default).


Obr. 3 GUIDE Quick Start

Po tejto voľbe sa spustí prostredie pre vývoj GUI. V ľavej časti sú sústredené jednotlivé aktívne prvky (Push Button, Slider …), ktoré môžeme využiť v našich aplikáciách. Na pracovnú plochu, ktorá tvorí najväčšiu plochu aplikácie, dostávame aktívne prvky systémom Drag&Drop.


Obr. 4. Prostredie pre tvorbu GUI

Množina aktívnych prvkov ktoré máme k dispozícii závisí od použitého operačného systému. V našom prípade sa jedná o systém Mac OS 10.6. V operačnom systéme Windows sa nachádza naviac prvok ActiveX. Pomocou neho môžeme dostať do našej aplikácie akýkoľvek prvok typu ActiveX, ktorý ponúka operačný systém Windows.

Umiestnime teda na naše pracovné plátno dva aktívne prvky s ktorými budeme pracovať. Najskôr Edit Text a potom Slider.


Obr. 5. Slider a Edit Text na pracovnej ploche

Upravme ich rozmer a zarovnajme ich pomocou nástroja Align Objects. Menu Align Objects vyvoláme kliknutím na ikonu v hornej lište.


Obr. 6 Úprava a zarovnanie objektov

V tomto momente je vhodné uložiť rozpracovanú úlohu. Tento úkon vykonáme voľbou File a Save. Druhá možnosť je využiť ikonu v hornej lište. Zvolíme názov našej aplikácie a adresár kam sa uloží. Matlab sa postará o uloženie súboru typu .fig, kde sú uložené grafické objekty, ich rozmer a poloha v rámci aplikácie. Funkčná stránka aplikácie sa však ukladá do druhého súboru. Ten má príponu .m a nachádzajú sa v ňom všetky funkcie, ktoré sa starajú o správnu prácu aktívnych prvkov. Súboru .m sa budeme venovať v nasledujúcich odstavcoch.

Aktívne prvky majú množinu vlastností ako poloha, farba, popis, názov (Tag), rozsah, prednastavená hodnota a podobne. Pre nastavenie týchto vlastností slúži Property Inspector. Jeho okno vyvoláme dvojklikom na príslušný aktívny prvok.


Obr. 7. Property Inspector

Dôležitá vlastnosť každého použitého objektu je Tag. Jedná sa o jedinečný názov zvoleného aktívneho prvku. Pod týmto názvom sa automaticky generuje kód v .m súbore. Preto voľte toto meno pozorne a venujte mu patričnú pozornosť. Vhodná voľba môže výrazne sprehľadniť program najmä v rozsiahlejších aplikáciách. V našom prípade necháme názvy prednastavené, nakoľko je nami tvorená aplikácia pomerne jednoduchá. Vlastnosť Tag je teda v prípade objektu slider slider1 a v prípade Edit Text edit1. Vlasnosť, ktorú je možné v našej aplikácii zmeniť je napr. Rozsah posuvníka. Nech minimum je 0 a maximum 10. Postačuje iba zmeniť príslušnú vlastnosť


Obr. 8. Vlastnosť Max objektu slider1

Podobným spôsobom môžeme zmeniť nápis, ktorý sa zobrazuje v okne Edit Text. Tentokrát sa jedná o zmenu vlastnosti String. Nastavme ju na hodnotu NULL. V tomto okamihu môžeme považovať návrh grafickej časti aplikácie za ukončený. Preto je vhodné pred ďalšou prácou uložiť ju.

Pokračovať budeme tvorbou programu, ktorý prepojí posuvník s textovým oknom. Cieľom je dosiahnuť, že pri zmene polohy posuvníka sa automaticky prepíše hodnota v textovom okne a pri prepise hodnoty v textovom okne sa posunie slider na pozíciu zodpovedajúce napísanej hodnote. Všetky tieto úkony musíme vykonať programovo v automaticky vygenerovanom .m súbore. M súbor vyvoláme kliknutím na ikonu M-file Editor v hornej lište.


Obr. 9 M-file Editor

Pri pohľade na zdrojový kód vidíme, že Matlab automaticky vygeneroval niekoľko funkcií. Medzi najdôležitejšiu patrí funkcia s príponou _OpenningFcn. Jedná sa o funkciu, ktorá sa vykoná počas prvého spustenia aplikácie. Slúži na nastavenie štartovacích hodnôt využívaných aplikáciou. Podrobnejšie sa jej budeme venovať v budúcej časti. My sa dnes sústredíme na funkcie s príponou _Callback. Takúto funckiu Matlab vygeneruje pre každý aktívny prvok, ktorý sme umiestnili na pracovnú plochu aplikácie. Prefix funkcie tvorí práve názov aktívneho prvku vo vlastnosti Tag. V našom prípde budú k dispozícii funkcie edit1_Callback a slider1_Callback.


Obr. 10 Zoznam funkcií v rámci .m súboru

Nakoľko je každá akcia previazaná s aktívnym prvkom zapúzdrená vo funkcii je potrebné vysvetliť spôsob odovzdávania dát medzi jednotlivými funkciami. Napreič celým GUI je prepletená dátová štruktúra s menom handles. K tejto špeciálnej premennej je možné pristupovať v každej funkcii. Spôsob ako odovzdávať dáta pomocou špeciálnej premennej si ukážeme v budúcej časti. Dnes sa sústredíme na spôsob získavania vlastností z aktívnych prvkov. Štruktúra handles hrá v tomto procese nezastupiteľné miesto. Ku každej vlastnosti a k jej hodnote je možné pristupovať takouto konštrukciou

handles.Tag_objektu(nazov_vlastnosti)

Takáto konštrukcia sa dá použiť ako pri čítaní vlastnosti, ale aj pri jej zmene. K tomuto účelu slúži dvojica príkazov get a set. Ak teda potrebujeme zistiť hodnotu, ktorá sa nachádza na posuvníku, použijeme takýto zápis

get(handles.slider1('Value'))

Analogicky by sme postupovali ak by sme chceli zmeniť hodnotu posuvníka.

set(handles.slider1,'Value',5)

V tomto momente už disponujeme potrebnými znalosťami na to, aby sme dokázali našu aplikáciu dokončiť. Zapíšme teda potrebný kód do príslušných Callbacks. Najskôr nech sú to riadky pre edit1_Callback.

val=get (handles.edit1,'String');
set(handles.slider1,'Value',str2num(val));

V prvom riadku do premennej val ukladáme reťazec, ktorý je zapísaný v editovacom okne typu Edit Text. Jedná sa o hodnotu typu string. Rovnako je aj nazvaná vlastnosť ktorá uchováva zadaný text do okna. V druhom riadku pomocou príkazu set zapisujeme do posuvníka slider1 hodnotu prečítanú z textového okna. Všimnite si, že musí dôjsť k pretypovaniu. Vlastnosť objektu slider1 Value očakáva numerickú a nie reťazcovú hodnotu. Preto je potrebné použiť príkaz str2num.


Obr. 11 edit1_Callback

Obdobným spôsobom zapíšeme kód aj do slider1_Callback.

val=get (handles.slider1,'Value');
set(handles.edit1,'String',val);

V prvom riadku prečítame hodnotu posuvníka slider1 a uložíme do numerickej premennej val. V druhom riadku zapíšeme hodnotu do textového okna príkazom set. Všimnite si, že v tomto prípade meníme hodnotu vlastnosti String. V tomto prípade nie je potrebné pretypovanie.


Obr. 12 slider1_Callback

V tomto momente je aplikácia hotová. Postačuje je už iba spustiť. Môžete tak spraviť priamo z príkazového riadku Matlabu, z M-file Editora, alebo z grafického editora. Výsledkom je jednoduchá aplikácia v ktorej komunikuje posuvník s oknom typu Edit Text a obrátene.


Obr. 13 hotové GUI


Video Tvorba jednoduchého GUI

Táto aplikácia nech je pre vás úvodom pre tvorbu náročnejších programov. V budúcej časti sa naučíme tvoriť zložitejšie rozhrania, v ktorých budeme využívať už aj grafiku, tlačidlá a roletové menu. Taktiež si priblížime význam funkcie _OpeningFcn.

12 príspevky(ov) k článku “30. Matlab – GUI 1. začíname”

  1. Peter Fodrek napísal:

    aj ked som to len preletel, vela veci som sa dovedel

  2. Peter Fodrek napísal:

    dozvedel

    Viac ako v clanku o realtime OS, co je moja parketa

  3. Juraj Gvoth napísal:

    Článok ako má byť. Princíp a jeho riešenie v jednoduchosti.

  4. Roman napísal:

    nemohli by tieto clanky predbiehat cvicenia predmetu mas ktore prednasate na FEI – ke? :D zislo by sa to velmi:D
    dik

  5. Martin Foltin napísal:

    No je mi jasné, že by to bolo super. Lenže problém je ako obvykle čas. Budem sa snažiť pripravovať čo najviac článkov, ale jednoducho aj príprava takéhoto krátkeho článku zaberie tak dva dni. V hlave mám už pripravený o výpočte frekvenčných charakteristík. Veľká časť o Simulinku už bola pred pár rokmi zverejnená na Macplanet http://www.macplanet.sk/portal/?p=1491 Je tam presne ten postup, ktorý som dával na prednáške.

    Ak by sa ale našli šikovní študenti čo mi s článkami pomôžu, tak možno by sme ich mohli vygenerovať viac.

  6. Peter Leitner napísal:

    no k tym frekvencnym charakteristikam by som vedel prilozit ruku k dielu, dokonca nieco uz mam aj odladene

  7. Martin Břach napísal:

    Přesně takovéhle články o tvorbě GUI by se mi hodily. Škoda, že nepokračujete… Hodilo by se mi volání funkcí, načítání proměnných tak, aby je viděl i matlab (nebo alespoň ja při tvorbě skriptu) atd… Z GUI jsem pořád ještě trochu vyplašený…

  8. Peter napísal:

    Skvely clanok a takisto ako napisal Martin predomnou by sa mi hodilo pokracovanie…

  9. Budy napísal:

    Skvely clanok. Jednoduchy a prehladny. My sme na univerzite brali GUI na jednej trojhodinovke, kde sme si cele gui presli rychlo. Uci nas to sice odbornik na matlab ale neviem z toho nic. Preto my vas clanok pomohol sa zorientovat a teraz uz zacinam chapat nasu trojhodinovku v skole. Vdaka

  10. Tom napísal:

    Ako sa dá spresniť simulácia aby výsledky boli rovné k reálnym hodnotám motora?
    Samozrejme v GUI.

  11. Martin Foltin napísal:

    Ďakujem za hodnotenia. V práci budeme pokračovať a myslím, že sa máte na čo tešiť. Zatiaľ môžete sledovať dianie ako na našom facebooku : http://www.facebook.com/humusoft alebo na http://www.youtube.com/humusoft.

  12. Martin Foltin napísal:

    Tom – zmena štruktúry modelu, iný rád, iné dáta na základe ktorých sa identifikuje. Skúste sa rozpísať viac.

Napísať príspevok