Uživatelské aplikace návrh GUI části programu v Matlabu



Podobné dokumenty
Modelování ve výpočtových software

TECHNICKÁ UNIVERZITA V LIBERCI Fakulta mechatroniky, informatiky a mezioborových studií

SEMESTRÁLNÍ PRÁCE Z PŘEDMĚTU MODELOVÁNÍ MATLABEM

Nový způsob práce s průběžnou klasifikací lze nastavit pouze tehdy, je-li průběžná klasifikace v evidenčním pololetí a školním roce prázdná.

X37SGS Signály a systémy

Nápověda k aplikaci GraphGUI

Postupy práce se šablonami IS MPP

Tematický celek Proměnné. Proměnné slouží k dočasnému uchovávání hodnot během provádění aplikace Deklarace proměnných

Prostředí Microstationu a jeho nastavení. Nastavení výkresu

Reliance 3 design OBSAH

Možnosti tisku v MarushkaDesignu

02. HODINA. 2.1 Typy souborů a objektů. 2.2 Ovládací prvky Label a TextBox

Vzorce. Suma. Tvorba vzorce napsáním. Tvorba vzorců průvodcem

Konvertor diakritiky 3. Instalace

Vizualizace. TECHNICKÁ UNIVERZITA V LIBERCI Fakulta mechatroniky, informatiky a mezioborových studií

MS PowerPoint ZÁKLADY

Velmi stručný návod jak dostat data z Terminálu Bloomberg do R

Popis rozšířujících funkcí JScriptu

Delphi popis prostředí

Cvičení 7: Delphi objekty CheckedBox, Radio- Button, EditBox

Kresba pomocí nadstavby

České vysoké učení technické v Praze Fakulta elektrotechnická. Bakalářská práce

Tvorba interaktivních dokumentů v Maple

Microsoft Office. Word vzhled dokumentu

Nástroje v InDesignu. Panel nástrojů 1. část. Nástroje otevřeme Okna Nástroje

Obsah Úvodem... 5 Co je to vlastně formulář... 6 Co je to šablona... 6 Jak se šablona uloží... 6 Jak souvisí formulář se šablonou...

Projekt. Sestavení projektu

OVLÁDÁNÍ PROGRAMU Obsah

Projektová dokumentace GED 2006

1. Nastavení dokumentu

DUM 03 téma: Tvary - objekty

Administrace webu Postup při práci

VYUŽITÍ GRAFICKÉHO UŽIVATELSKÉHO ROZHRANÍ MATLABU VE VÝZKUMU A VÝUCE MĚŘENÍ

Cvičení 6 PARAMETRICKÉ 3D MODELOVÁNÍ TVORBA VÝKRESU OBROBKU Inventor Professional 2012

Popis a ovládání. Aplikace 602XML Filler

Obsah. 1.1 Práce se záznamy Stránka Dnes Kontakt se zákazníkem... 5

Manuál k ovládání aplikace INFOwin.

Tabulkový procesor. Orientace textu. O úroveň níž O úroveň výš

Budovy a místnosti. 1. Spuštění modulu Budovy a místnosti

Začínáme pracovat s tabulkovým procesorem MS Excel

Návod k ovládání aplikace

Tvorba fotogalerie v HTML str.1

verze Grafický editor PALSTAT s.r.o. systémy řízení jakosti PALSTAT CAQ 1 Obsah

Excel tabulkový procesor

Cvičení 2. Přesměrování vstupu a výstupu. Posloupnost příkazů. Příkazy pro informaci o uživatelích

KAPITOLA 3 - ZPRACOVÁNÍ TEXTU

GEOM LITE - MANUÁL hlavní obrazovka

PALSTAT s.r.o. systémy řízení jakosti PALSTAT CAQ verze Výstupní kontrola 07.1/ Obsah

Obsah Přehled existujících a evidence nových klientů... 3 Přehled foto-záznamů... 4 Nahrávání foto-záznamů... 6 Analýza foto-záznamů...

Ovládání Open Office.org Calc Ukládání dokumentu : Levým tlačítkem myši kliknete v menu na Soubor a pak na Uložit jako.

Čtvrtek 3. listopadu. Makra v Excelu. Obecná definice makra: Spouštění makra: Druhy maker, způsoby tvorby a jejich ukládání

1. Zdi Vložit nový vrchol do zdi. Krok 1: Tvorba jednovrstvé zdi. Krok 2: Nakreslení konstrukčních čar Vložit nový vrchol do zdi 3

01. HODINA. 1.1 Spuštění programu VB Prvky integrovaného vývojového prostředí. - pomocí ikony, z menu Start.

MS OFFICE POWER POINT 2010

Přehledový manuál aplikace GABVAR (verze )

Vkládání dalších objektů

Tabulkový kalkulátor

VIANIV. Interaktivní návrh nivelety. Příručka uživatele. Revize PRAGOPROJEKT a.s. & VIAPONT s.r.o.

Úvod do fuzzy logiky a fuzzy regulátory

Práce s texty, Transformace rastru, Připojení GPS

Zóny a pravidla UŽIVATELSKÁ PŘÍRUČKA

MS OFFICE, POWERPOINT

Uživatelská příručka. 06/2018 Technické změny vyhrazeny.

SPIRIT Nové funkce. SOFTconsult spol. s r. o., Praha

ZŠ ÚnO, Bratří Čapků 1332

lindab comfort Krok za krokem manuál DIMcomfort 4.0

DUM 06 téma: Tvorba makra pomocí VBA

Předmluva 11 Typografická konvence použitá v knize Úvod do Excelu

Stručný návod na program COMSOL, řešení příkladu 6 z Tepelných procesů.

Obslužný software. PAP ISO 9001

Tento projekt je spolufinancován Evropským sociálním fondem a státním rozpočtem České republiky. PORTÁL KUDY KAM. Manuál pro administrátory. Verze 1.

Mapová aplikace HZS Ústeckého kraje

WR Reality. Web Revolution. Uživatelský manuál administračního rozhraní

METODICKÝ POKYN PRÁCE S MS PowerPoint - POKROČILÍ. Tento projekt je spolufinancován Evropským sociálním fondem a státním rozpočtem České republiky.

MATLAB Úvod. Úvod do Matlabu. Miloslav Čapek

Microsoft Office Excel 2003

8. OKNA 73. obr. 1 Roletové menu "Okna"

zoom-driver Manuál k redakčnímu systému zoom-driver created by virtual-zoom s.r.o.

Dotyková obrázovká v prográmu TRIFID

Odborný garant: Doc. Ing. Miroslav Píška, CSc.

Příručka pro aplikaci KSnapshot

Jak namalovat obraz v programu Malování

Uživatelská příručka pro ředitele škol

František Hudek. červenec 2012

Popis a obsluha vektorového obvodového analyzátoru R&S ZVL

Desktopová aplikace pro tvorbu kartografických výstupů

Karusel. Compiled :34:04 by Document Globe 1

Zpravodaj. Uživatelská příručka. Verze

Gymnázium Vysoké Mýto nám. Vaňorného 163, Vysoké Mýto

3D sledování pozice vojáka v zastavěném prostoru a budově

K 2 - Základy zpracování textu

PALSTAT s.r.o. systémy řízení jakosti PALSTAT CAQ verze Mezioperační kontrola 07.1/ Obsah

SignEditor 1 - návod k použití

43 HTML šablony. Záložka Šablony v systému

Dělení a vlastnosti komponent

Odpadové hospodářství v ORP Ústí nad Labem

Metoda Monte Carlo a její aplikace v problematice oceňování technologií. Manuál k programu

Microsoft Word - Styly, obsah a další

Transkript:

Uživatelské aplikace návrh GUI části programu v Matlabu přednáška předmětu A2B99MAA, 12.týden Miloslav Čapek K13117, B2-819

Obsah přednášky grafické rozhraní jako část programu koncepce v Matlabu, identifikátory objektů vlastnosti grafických objektů (set, get, uložení reference) callback funkce (tvorba, volání, editace) jednotlivé grafické objekty přehled root (funkce monitor), figure axes, axis ui-objekty kontextové menu, kurzor, ikony, menu předdefinované bloky techniky návrhu grafického rozhraní návrh jednoduchého programu (rozbor, návrh, test) I. příklady realizovaných aplikací dotazy, diskuze literatura program cvičení II.

Programování v MATLABu ZNALOST tvorby funkčního kódu (funkce, matice, indexace) ZNALOST tvorby vlastních funkcí (hlavní, vedlejší, ) ZNALOST efektivního návrhu a programování Matlabu GUI TVORBA plnohodnotné aplikace/toolboxu/ 1/63

GUI (Graphical User Interface) user uživatel? GUI aplikace function3 function1 function2 GUI: Rozhraní, které umožňuje uživateli působit na běh programu a program jako takový ovládat. 2/63

Příklad grafického rozhraní Počáteční stav Konečný stav funkce programu 1) co má GUI umět (všechny funkce a ability budoucí aplikace)? 2) vstupy, výstupy a práva uživatele 3) seznam operací, event. nákres na papír 3/63

GUI v Matlabu ukázky1 4/63

GUI v Matlabu ukázky2 5/63

GUI v Matlabu ukázky3 6/63

Koncepce grafického systému Matlabu grafické funkce Matlabu lze rozdělit na: funkce vyšší úrovně funkce nižší úrovně funkce obsluhují v obou případech sadu grafických objektů (většina bude probrána dále) na vyšší úrovni přistupujeme k jednotlivým funkcím a vlastnosti objektů ovlivňujeme pouze parametry volané funkce na nižší úrovni vyvoláváme přímo objekty a pracujeme s nimi (můžeme tedy měnit fonty, barvy, tloušťky čar a další) 7/63

2D grafy v Matlabu (vyšší úroveň) root >> plot(linspace(1,10,10)) >> stem(linspace(1,10,10)) >> % a další 8/63

3D grafy v Matlabu (vyšší úroveň) root >> [X,Y] = meshgrid(-3:.125:3); >> Z = sin(x) + cos(y); >> mesh(x,y,z); >> axis([-3 3-3 3-2 2]) 9/63

Z čeho je složen GUI Matlabu? monitor ~ root okno aplikace ~ figure kreslící prostor ~ axes grafické prvky ~ uiobjects 10/63

Nižší úroveň tvorby grafiky v Matlabu objekty jsou rozděleny podle logické závislosti root figure uibottongroup uiobjects uicontrol uicontextmenu axes uimenu Core objects Plot objects Group objects line, text, surface, patch, image, uipanel uitoolbar uitable uipushtool uitoggletool Annotation objects kompletní rozdělení je velmi komplikované 11/63

Přehled ui- objektů uitoolbar uimenu uitable uicontextmenu uipanel uibottongroup uicontrol 12/63

Přehled uicontrol text edit pushbutton checkbox popupmenu slider togglebutton radiobutton listbox uitable axes uibuttongroup uipanel 13/63

Příklad: moje tlačítko (uiobjekt) vytvořím tlačítko moje tlačítko klik function myfunc(pushref,event) % tato funkce je vedlejsi % pushref: reference na objekt % moje tlačítko % event: další informace o události telo funkce end vlastnost typ uiobjektu font písma velikost písma řez písma barva písma rozměr tlačítka umístění tlačítka barva tlačítka moje tlačítko pushbutton MS Sans Serif 11 bold k (black) [0.48 0.84 0.2 0.13] normalized y možná nastavení edit / text / Arial / Verdana / {1, } normal / italic [r g b] normalized / pixels [x1 y1 x_size y_size] (viz dále) [r g b] callback funkce @myfunc(scr,evnt) jakákoliv definice callback funkce 14/63

Identifikátor objektu (handle) Každý samostaný objekt má Matlabu handle). svůj identifikátor (řečí Tyto handely jsou v podstatě referencí na existující objekt. Handle Matlab vytvoří vždy, je na uživateli jeho uchování. Složité grafy (vrstevnice) mohou mít více identifikátorů. root má vždy handle = 0, figure zpravidla celé kladné číslo, ostatní objekty mají za handle kladné reálné číslo. handely >> fighandle = figure; >> axhandle = axes; Číslo uložené v proměnné fighandle existuje i po uzavření okna, již se ale nejedná o handle. 15/63

Vlastnosti objektu všechny objekty mají množinu vlastností, které říkají, jak bude objekt zobrazen a jak s ním bude zacházeno objekt je tvořen množinou implicitních hodnot vlastností tyto hodnoty můžeme číst a ve většině případů i nastavit názvy vlastností nejsou case sensitive, dokonce lze některé názvy vlastností i zkrátit, pokud stále vyjadřují danou vlastnost >> figure('color','b'); >> figure('color','b'); >> fighandle = figure('position',[100 100 200 200]); >> fighandle = figure('pos',[100 100 200 200]); vlastnosti lze definovat dvojím způsobem: při vzniku objektu později po vytvoření objektu pomocí funkce set 16/63

Společné vlastnosti následující vlastnosti jsou společné všem objektům: ButtonDownFcn Children Clipping CreateFcn, DeleteFcn ChangeFcn BusyAction HandleVisibility Interruptible Parent Selected SelectionHighlight Tag Type UserData Visible Funkce, která se spustí při stisku myši nad objektem axes. Bude popsáno dále. Identifikátory (handely) všech potomků tohoto objektu. Umožní / zakáže ořezávání. Funkce, která se spustí při vytvoření (před zobrazením) / smazání objektu. Funkce, která se spustí při změně objektu. Řídí mód přerušení callback funkcí (řazení do fronty / zahazování). Určuje viditelnost identifikátorů objektů. Určuje, zda je možno přerušit callback funkci (její vykonávání). Identifikátor rodiče (nadřazeného objektu, viz schéma). Indikuje, zda byl objekt vybrán můžeme se ptát, zda je objekt aktivní. Určuje, zda se objekt po vybrání zvýrazní. Uživatelem specifikovaný popis objektu (vhodný pro pozdější správu a hledání obj). Typ objektu ( figure / edit / text / ) Místo, kam si může uživatel uložit libovolná data pro vlastní použití. Určuje, zda je objekt viditelný. 17/63

Funkce set pokud jsme nenastavili hodnotu vlastnosti při vzniku objektu, nebo ji chceme změnit, použijeme funkci set set(hndl,'propertyname',propertyvalue,...) vytvoříme osy dodatečně změníme jejich barvu dodatečně přidáme y-ovou mřížku >> axes; >> set(gca,'color','y'); >> set(gca,'ygrid','on'); funkce set lze využít na všechny grafické objekty 18/63

Funkce get můžeme vyvolat hodnotu vlastnosti grafického objektu PropertyValue = get(h,'propertyname'); ponechme strukturu z minulého slajdu a najděme barvu a velikost os >> axcolor = get(gca,'color') axcolor = 1 1 0 >> axsize = get(gca,'pos') axsize = 0.1300 0.1100 0.7750 0.8150 funkce get lze využít na všechny grafické objekty, více informací viz help get 19/63

Implicitní vlastnosti všechny vlastnosti mají své implicitní (~defaultní) hodnoty lze definovat i vlastní implicitní hodnoty postup hledání (dokud není nalezena implicitní hodnota zadaná uživatelem, nebo vestavěná) aktuální objekt postupně předci objektu >> set(gcf, DefaultLineColor, w ) na jaký(é) objekt(y) klíč. slovo typ objektu vlastnost zadáním hodnoty factory nastavíme vlastnost na vestavěnou hodnotu pokud chceme definovat některé hodnoty trvale (vždy), využijeme skript startup.m popisovaný v minulé přednášce 20/63

GUI: pozice a rozměry Matlab slučuje velikost objektu a jeho umístění do jedné matice dva způsoby zadání absolutně v pixelech (A) normalizovaně (B) [left bottom width height] %% A) uicontrol('units',pixels',... 'Style','Text','Position',[50 150 75 25],... %% B) uicontrol('units','normalized',... 'Style','Text','Position',[.05.12 0.075 0.02],... 21/63

Callback funkce Nad každým objektem jsou definované operace, které může uživatel využít (klik na tlačítko, výběr z nabídky, ). Tyto operace jsou obsluhovány pomocí tzv. callback funkcí. Jinak řečeno, pokud uživatel klikne na tlačítko, aktivuje se callback funkce této události (je-li definována). Pokud nemá být GUI statický, musí vždy obsahovat alespoň jednu callback funkci. Hodnoty callback funkcí jsou uloženy jako vlastnosti objektu lze je měnit, mazat, kopírovat function soucet(a,b) % secte dve zadana cisla vytvoreni GUIe, definice callback funkce (funkce na zadani hodnot) function mojetlacitko(hndl,evnt) telo vedlejsi funkce end end klik aktivace callback funkce function mojetlacitko(hndl,evnt) % provede secteni cisel nacti hodnoty a, b c = a + b; uloz c, resp. vypis vysledky end 22/63

Typy callback funkcí Callback CellEditCallback CellSelectionCallback ButtonDownFcn ClickedCallback CreateFcn, DeleteFcn OffCallback, OnCallback ResizeFcn SelectionChangeFcn KeyPressFcn KeyReleaseFcn WindowButtonDownFcn WindowButtonMotionFcn WindowButtonUpFcn WindowKeyPressFcn WindowKeyReleaseFcn WindowScrollWheelFcn CloseRequestFcn Provede context menu, se při uiobjects typickém užití ui komponenty (klik tlačítka, vyběr menu,...). Reaguje uitable na změnu hodnoty v tabulce uitable. Reaguje uitable na výběr libovolné buňky v tabulce uitable. Vyhodnotí axes, figure, se button vždy, když group, je panel, kurzor uiobjects nad objektem axes a klikne se myší. Reaguje push tool, na toggle klik myši tool na tlačítka push nebo toggle. Vyhodnotí axes, button se group, právě context pokud je menu, daný objekt figure, vytvořen menu, panel, / smazán. uiobjects, Vyhodnotí toggle tool se, pokud je stav toggle tlačítka změněn na off / on. Aktivuje figure, panel, se, když button uživatel groupzmění velikost figure, panel nebo button group. Reaguje button group na změnu aktivního knoflíku, nebo toggle tlačítka ve skupině. Zavolá figure, uiobjects callback, pokud je stisknuta klávesa (a figure aktivní). Zavolá figure callback, pokud je uvolněn stisk klávesy (a figure aktivní). Reaguje figure na klik myši (libovolné tlačítko) uvnitř figure. Reaguje figure na pohyb myši uvnitř figure. Reaguje figure na uvolnění stisku tlačítka myši (libovolné tlačítko) uvnitř figure. Reaguje figure na stisk (tl/kl), pokud je figure nebo některý jeho potomek aktivní. Reaguje figure na uvolnění stisku (tlačítka/klávesy), pokud je figure nebo -//-. Reaguje figure na pohyb rolovacího kolečka myši (pokud je figure aktivní). Volá figurecallback funkci právě pokud je uzavíráno aktivní okno figure. 23/63

Vyhodnocení callback funkce zpravidla má každá eventualita vlastní callback (výběr Ano má jiný callback než výběr Ne ) callback funkce je vyhodnocena jako řetězec (funkcí) eval je vyhodnocena v základním pracovním prostoru Matlabu tomu odpovídají možné strategie zápisu: >> hb = uicontrol('style','pushbutton','string','plot line') >> set(hb,'callback','plot(rand(20,3))') % definice callback funkce >> set(hb,'callback','plot(myvar)') % zmena callback funkce figure uicontrol('style','slider',... 'Callback',@dispSliderValue); function display_slider_value(... hobject,eventdata) disp(['slider moved to '... num2str(get(hobject,'value'))]); set(hb,'callback',@(scr,event)plotfcn(xdata,ydata,graphcolor)); 24/63

Funkce findobj najde objekt(y) s požadovanou vlastností vrací jejich identifikátor (event. pole indentifikátorů) h = findobj h = findobj('propertyname',propertyvalue,...) >> fighndl = gcf % fighndl = figure; >> axshndl = gca % axshndl = figure; >> htx1 = uicontrol('style','text','string','hello','tag','tx'); >> htx2 = uicontrol('style','text','string','test1','tag','tx2'); >> h = findobj('style','text') h = 0.0072 171.0071 >> h = findobj('style','text','-and','tag','tx') h = 0.0072 25/63

Funkce findall, allchild findall: najde všechny grafické objekty (včetně skrytých), handle_list může být např. gcf object_handles = findall(handle_list) object_handles = findall(handle_list,'property','value',...) allchild: najde všechny potomky vybraného objektu (včetně skrytých) pokud je handle_list vektor indentifikátorů, vrací Matlab pole buněk child_handles = allchild(handle_list) empty matrix >> axes >> get(gca,'children') >> allchild(gca) 4 handely 26/63

Funkce gcf, gca a gco slouží k jednoduchému přístupu k identifikátorům objektů, které jsou právě aktivní, konkrétně jde o: gcf (vrací identifikátor aktuálního objektu figure) gca (vrací identifikátor aktuálního objektu axes) gco (vrací identifikátor objektu, na který se naposledy kliklo myší, tolerance u čar je 5 pixelů) >> figure >> fighandle = gcf; tyto funkce můžeme využít jako vstupní identifikátor pro jiné funkce vyžadující handle objektu figure nebo axes >> set(gcf,'color',[0 0 0]) 27/63

Funkce ishandle jedna z mnoha funkcí detekujících stav v Matlabu (is*) ishandle vrací true, je-li argument funkce handle, v opačném případě vrací false >> fighndl = figure; >> ishandle(fighndl) ans = 1 >> delete(fighndl) >> ishandle(fighndl) ans = 0 28/63

Funkce copyobj tyto funkce umožňují ovlivnit životní cyklu objektu copyobj: zkopíruje objekt a jeho potomky new_handle = copyobj(h,p) >> hf = figure >> ha = axes >> hl1 = line([.1.8],[0.5 0.5]) >> hl2 = copyobj(hl1,ha) >> ishandle(hl1) && ishandle(hl2) ans = 1 29/63

Funkce delete a reset tyto funkce umožňují ovlivnit životní cyklu objektu delete: odstraní soubor(y) nebo grafický objekt(y) i s jeho potomky delete(filename1, filename2,...) delete(handle_array) >> delete(hf) % viz predesly priklad >> ishandle(hl1) && ishandle(hl2) ans = 0 reset: nastaví všechny hodnoty objektu zpět na implicitní reset(h) 30/63

root (vlastnosti monitoru) v Matlabu odpovídá obrazovce počítače je unikátní (handle = 0) všechny další objekty jsou potomky >> dispnfo = get(0); >> dispsize = get(0, ScreenSize ); >> figsize = [400 200]; >> fighndl = figure( pos,... [(dispsize(3)-figsize(1))/2... (dispsize(4)-figsize(2))/2... figsize(1) figsize(2)]); 200 400 [760 500] [left bottom width height] vytvoří okno (figure) o velikosti figsize(1) x figsize(2) přesně uprostřed obrazovky 31/63

figure objekt figure vytváří samostatné grafické okno všechny event. okna jsou potomkem objektu root všechny podružné grafické objekty jsou potomkem objektu figure a jsou v daném okně zobrazeny voláme-li podružnou funkci bez existence okna, vytvoří se nové figure má mnoho vlastností (viz get(figure)) >> figure; >> fighandle =... figure( Color, r ); >> axes; 32/63

axes, axis definují oblast v grafickém okně, kam jsou umísťovány potomci objektu axes nejčastější využití axes ja jako os grafu/obrázku (2D i 3D) všechny podružné objekty k objektu axes generují osy i pokud zatím neexistují (podobně jako u figure) axes má mnoho vlastností (viz get(axes)) >> line([.1.9],[0 1],'LineWidth',3) >> axis([0 1 0 1]) >> fighndl = gcf fighndl = 1 >> axshndl = gca axshndl = 171.0031 >> line([.8.2],[.1.6],'linewidth',2) >> axis([0 2 0 1]) 33/63

line, patch, surface, image, text line: využíváme při tvorbě grafů (plot, plot3, contour, ) patch: vyplněné (barevné) mnohoúhelníky, funkce fill, fill3 surface: čtyřúhelníky (vrcholy definované prvky třírozměrné matice), mohou být kresleny jako plné (pcolor, surf), barevně interpolované, nebo drátové (mesh) image: výsledek transformace prvků matice na indexy aktuální mapy barev (generovány funkcí image) text: znakové řetězce (text, gtext, title, xlabel,ylabel,zlabel) všechny tyto objekty jsou potomky objektu axes (tj. lze je realizovat pouze nad tímto objektem vykreslení v osách) ke všem objektům lze přistupovat i přímo, tvořit je, nastavovat a měnit jejich vlastnosti, kopírovat a mazat je 34/63

Skupina uiobjects: uimenu lze definovat klávesové zkratky (např. CTRL+L) v menu se lze pohybovat pomocí ALT+písmeno callback funkce lze přiřadit 490 řádek kódu uiobjects uimenu uicontextmenu uipanel uitoolbar uicontrol uitable uibottongroup více viz help uimenu 35/63

Skupina uiobjects: uicontextmenu vytvoří kontextové menu lze ho vyvolat pravým klikem myši výběr položky z menu aktivuje zadaný callback uiobjects >> fighndl = figure; >> cmenu = uicontextmenu; >> axshndl = axes('parent',fighndl,'uicontextmenu',cmenu); >> uimenu(cmenu,'label','vyber1','callback',@callbackfcn1); >> uimenu(cmenu,'label','vyber2','callback',@callbackfcn2,... 'Separator','on'); >> uimenu(cmenu,'label','vyber3','callback',@callbackfcn3); uimenu uicontextmenu uipanel uitoolbar uicontrol uitable uibottongroup 36/63

Skupina uiobjects: uipanel vytvoří panel, který je rodičem dalších objektů (uicontrol) objekty uvnitř jsou orientovány vzhledem k panelu uiobjects uimenu uicontextmenu uipanel >> fghnd = figure; >> h1p = uipanel('title','hlavni panel',... 'FontSize',12,'BackgroundColor',... 'white','position',[.25.25.4.25]); >> h2p = uipanel('parent',h1p,... 'Title','sub-panel','FontSize',12,... 'Position',[.25.25.7.7]); uitoolbar uicontrol uitable uibottongroup lze nastavovat barvu pozadí, šírku rámečku a mnoho dalšího více viz help uipanel 37/63

Skupina uiobjects: uitable vytvoří 2D tabulku, komponent může být umístěn kdekoliv v okně figure uiobjects uimenu uicontextmenu uipanel uitoolbar >> figure >> t = uitable; >> set(t,'data',magic(10)); >> set(t,'columnwidth',{35}) uicontrol uitable uibottongroup tabulka může mít celou řadu vlastností i prvků (check, popup) callback funkce výběru změny buňky, více viz help uitable 38/63

Skupina uicontrol: text umístí na zvolené místo text zpravidla se využívá jako popiska dalších prvků nebo informační text pro uživatele lze nastavit font, řez, velikost, barva (textu i pozadí), uicontrol text edit pushbutton >> figure >> text1 = uicontrol(... 'Units','Normalized',... 'Style','Text',... 'Position',[.35.45 0.3 0.1],... 'Tag','txtMAA1',... 'FontSize',10,... 'BackgroundColor',[.8.5.8],... 'HorizontalAlignment','center',... 'String','Toto je text k MAA'); togglebutton radiobutton checkbox listbox slider popupmenu 39/63

Skupina uicontrol: edit umožňuje načíst řetězec programátor si tento řetězec musí dále zpracovat (užití funkcí str2num, str2double atp.) uživatel může pracovat i pomocí (CTRL+C,V,X,A,H) string obsahuje vložený řetězec pomocí edit lze vytvořit v Matlabu např. konzoly uicontrol text edit pushbutton togglebutton radiobutton checkbox listbox slider popupmenu 40/63

Skupina uicontrol: pushbutton jednostavové tlačítko callback funkce je vyvolána jeho stisknutím nastavení vzhledu je podobné jako u objektu text uicontrol text edit pushbutton togglebutton radiobutton checkbox listbox slider popupmenu 41/63

Skupina uicontrol: radiobutton stavy vybrán nevybrán (hodnoty max-min) tyto prvky lze sdružovat do větších skupin button group (objekt uibuttongroup) při vyvolání callback funkce lze získat informaci z kterého prvku uživatel přepnul na který uicontrol text edit pushbutton togglebutton radiobutton checkbox listbox slider popupmenu 42/63

Skupina uicontrol: checkbox podobné jako radiobutton zaškrtávácí políčko (s doprovodným textem) callback vyvolán změnou stavu uicontrol text edit function checkboxfcn(hobj) % osetreno %% zjisteni, zda je check vybran if (get(hobject,'value') % vybran %... else % nevybran %... end pushbutton togglebutton radiobutton checkbox listbox slider popupmenu 43/63

Skupina uicontrol: listbox zobrazuje seznam, lze vybrat jednu nebo i více položek vlastnost string obsahuje seznam řetězců (položek) vlastnost value obsahuje matici vybraných položek hodnoty max a min ovlivňují výběr uicontrol text edit pushbutton togglebutton radiobutton checkbox listbox slider popupmenu 44/63

Skupina uicontrol: slider na vstupu numerický rozsah (min-max) uživatel se pohybuje po skocích (sliderstep) jezdcem uicontrol text Požadujeme: rozsah: <2,10> krok tažením: 0.4 krok kliknutím: 1 počáteční hodnota: 6.5 slider_step(1) = 0.4/(10-2); slider_step(2) = 1/(10-2); set(sliderhndl, sliderstep,... slider_step, max,10,... min,2, Value,6.5); edit pushbutton togglebutton radiobutton checkbox listbox slider popupmenu 45/63

Skupina uicontrol: popupmenu klik na šipku zobrazí seznam, z něj lze vybrat jednu položku string obsahuje seznam řetězců value obsahuje index vybrané položky uicontrol text edit function popupfcn(hobj) % osetreno val = get(hobj,'value'); string_list = get(hobj,'string'); selected_string = string_list{val}; %... pushbutton togglebutton radiobutton checkbox listbox slider popupmenu 46/63

uitoolbar, colormap funkce lze využívat i ve vlastním GUIi (brush, pan, zoom, datacursormode) klik volání vlastní callback funkce takto je ikona nakreslena v m-souboru pics = [1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1;... 1.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6 1;... 1.6 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1.6 1;... 1.6 1 0 0 0 1 0 0 0 0 0 1 1 1 1 1 1.6 1;... 1.6 1 0 1 1 0 1 1 0 1 1 1 1 1 1 1 1.6 1;... 1.6 1 0 1 1 0 1 1 0 1 1 1 1 1 1 1 1.6 1;... 1.6 1 0 0 0 1 1 1 0 1 1 1 1 1 1 1 1.6 1;... 1.6 1 0 1 1 1 1 1 0 1 1 1 0 0 0 0 1.6 1;... 1.6 1 0 1 1 1 1 1 0 1 1 1 1 1 0 0 1.6 1;... 1.6 1 0 1 1 1 1 1 0 1 1 1 1 0 1 0 1.6 1;... 1.6 1 1 1 1 1 1 1 1 1 1 1 0 1 1 0 1.6 1;... 1.6 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1.6 1;... 1.6 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1.6 1;... 1.6 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1.6 1;... 1.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6 1;... 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1]; icon(:,:,1) =.85. * pics; icon(:,:,2) =.98. * pics; icon(:,:,3) =.85. * pics; vlastní barevné mapy, vlastní rozsahy, 47/63

Dialogové boxy v Matlabu nejčastější operace uživatel GUI jsou předdefinovány ty nejužívanější jsou zobrazeny níže (většina): user helpdlg msgbox warndlg errordlg GUI inputdlg listdlg questdlg file uigetdir uigetfile uiopen file uiputfile uisave user waitbar 48/63

Příklad1: msgbox msgbox zobrazí zprávu pro uživatele h = msgbox(message,title); h = msgbox(message,title,'custom',icondata,iconcmap); >> h = msgbox({'toto je zprava pro studenty MAA.',... 'ZDE muze byt text'},'moje zprava') 49/63

Příklad2: questdlg questdlg zobrazí otázku, vrátí odpověď (okno je modal) button = questdlg('qstring') button = questdlg('qstring','title',... 'str1','str2','str3',default) >> button = questdlg('ukoncit aplikaci?',... 'Konec aplikace','ano','ne','ano') 50/63

Příklad3: uigetfile uigetfile uživatel může vybrat soubor(y) ze souborového systému uigetfile [FileName,PathName,FilterIndex] = uigetfile(... FilterSpec,DialogTitle,DefaultName) >> [FileName,PathName] =... uigetfile('*.m',... 'Select the M-file'); 51/63

Příklad4: uiputfile uiputfile otevře dialog pro ukládání soubor(ů) uiputfile [FileName,PathName,FilterIndex] = uiputfile(... FilterSpec,DialogTitle,DefaultName) >> [file,path] =... uiputfile('*.mat',... 'Ulozit workspace jako:',... 'defaultfile.mat') 52/63

Příklad5: waitbar waitbar zobrazuje stav procesu h = waitbar(x,'message') waitbar(x,'message',property_name,property_value,...) >> h = waitbar(0,'please wait...'); kroku = 1000; for i = 1:kroku waitbar(i/kroku); end close(h); 53/63

Techniky návrhu GUI - rozdělení existuje několik přístupů (metodik) na tvorbu GUIe návrh pomocí nástroje GUIDE >> guide switch-board technika využití vedlejších a nested funkcí jako callback funkcí plně OOP přístup (vč. OO funkční části kódů) 54/63

Uchovávání dat v GUI Jak uchovávat data (zadaná i handely objektů) v GUI? globální proměnné (krajní možnost) použití vlastnosti UserData (záleží na velikosti aplikace) použití funkcí guidata nebo setappdata a getappdata plně OOP přístup (vč. OO funkční části kódů, i tak se neubráníme využití jedné z výše uvedených strategií) 55/63

Funkce guidata funkce umožňuje uložit nebo získat GUI data usnadňuje programátorovi přístup k datům (rozhraní) postup bývá následující: získáme kopii dat data = guidata(object_handle) provedeme změnu dat / potřebný výpočet pokud se data změnila, uložíme guidata(object_handle,data) guidata(object_handle,data) data = guidata(object_handle) >> fhndl = figure( Toolbar, none ); >> allfighndl = guihandles(fhndl); >> guidata(fhndl,allfighndl); function mycallback() %... myallfighndl = guidata(gcbo); myallfighndl.time = clock; Guidata(gcbo,myAllFigHndl); funkce guihandles vrací indentifikátory všech viditelných objektů ve figure funkce gcbo vrací identifikátor objektu, jehož callback je právě vyhodnocován 56/63

Funkce setappdata a getappdata setappdata: umožní definovat nová data (dvojice jménohodnota) pro danou aplikaci setappdata(object_handle,'name',value) getappdata: umožní získat dříve definovaná data z vybraného objektu value = getappdata(object_handle,name) values = getappdata(object_handle) 57/63

Návrh jednoduchého programu (#1) co by měl umět: co chceme ovlivňovat na vstupu: požadované výstupy: použité objekty: callback funkce: uložení identifikátorů: styl programování: 58/63

Návrh jednoduchého programu (#2) nákres GUIe, umístění callback funkcí, duplicity? realizace 59/63

Návrh jednoduchého programu (#3) oživení test 60/63

GUI: Závěrečné shrnutí Vždy promyslet co má GUI umět a jak. Nákres GUIe!!! Definice callback funkcí, hlaviček funkcí, vstupů a výstupů. Budu využívat reference na objekty? Kam je budu ukládat? GUI by měl být přehledný, bez slepých uliček a chyb. TVORBA GUIe + oživení 61/63

Literatura K.Zaplatílek, B.Doňar: MATLAB - Matlab pro začátečníky K.Zaplatílek, B.Doňar: MATLAB - Tvorba uživatelských aplikací Mathworks: Creating Graphical User Interfaces (dokumentace pdf) Mathworks: Graphics (dokumentace pdf) Mathworks: Programming Tips (dokumentace pdf) P.Marchand, O.T.Holland: Graphics and GUIs with Matlab B.R.Hunt, R.L.Lipsman, J.M.Rosenberg: A Guide to Matlab fórum na www.mathworks.com internet, google 62/63

Program cvičení, náhradní test Program cvičení: Vzhledem k volnu ST 12.5. by cvičení někdo měl a někdo ne cvičení je zrušeno (resp. jeho náplň). Připravené cvičení bude k dipozici na moodlu. Zájemci nechť si prostudují samostatně. Náhradní test: Všichni, kdo mají nárok (a chtějí) mohou psát náhradní test. Na náhradní, resp. opravné testy se hlašte do KOSu. Podle zaplnění mohou být přidány termíny. 63/63

Děkuji za pozornost miloslav.capek@fel.cvut.cz