MATLAB Prowadzący: dr hab. inż. Marek Jaszczur Poziom: początkujący Laboratorium 13: GUI - Graficzny interfejs użytkownika Cel: Projektowanie z wykorzystaniem Graficzny Interfejs Użytkownika Czas: Wprowadzenia 30 minut, ćwiczeń 60 minut, testu 0 minut Wstęp Graficzny interfejs użytkownika w MATLABie można generować na dwa sposoby: wykorzystując nakładkę GUIDE bądź też programując bezpośrednio pliki *.m (bez używania GUIDE i tworzenia plików *.fig) GUIDE (GUI design Environment) ułatwia tworzenie samego GUI dlatego na tych zajęciach skupimy się na pierwszym sposobie tworzenia interfejsu graficznego. Należy jednak pamiętać, że istnieje możliwość bezpośredniego programowania interfejsu graficznego. Nakładkę GUIDE uruchamiamy wpisując w oknie poleceń MATLABa polecenie guide >> guide Po zatwierdzeniu pojawia się okno, w którym mamy do wyboru kilka opcji dla szablonu początkowego: Blank GUI (Default) - jest to domyślna opcja, puste GUI, GUI with Uicontrols - otwiera przykładowe GUI zawierająca kilka elementów, GUI with Axes and Menu otwiera GUI które zawiera wykres i rozwijane menu. Modal Question Dialog - przykładowe okno dialogowe Po wybraniu drugiej opcji pokazuje się następujące okno:
Powyższe okno to właściwe okno nakładki GUIDE. Obszar wewnątrz okna nazywa się Figure. Na nim rozmieszczane są wszystkie elementy GUI. Z lewej strony okna znajdują się zestawy dostępnych w matlabie kontrolek. Kontrolki możemy dodawać na dwa różne sposoby. Pierwszy sposób polega na kliknięciu kontrolki którą chcemy dodać, a potem w obszarze okna w celu dodania tej kontrolki. Wówczas w mat labie ustawi się domyślny rozmiar dla kontrolki. Inna metoda polega na tym że możemy zaznaczyć obszar zamiast klikać w obrębie okna. Wówczas spowoduje to dodanie kontrolki o rozmiarach określonych przez zaznaczony obszar. Klikając prawym przyciskiem (RMB) myszy na kontrolce, można z menu wybrać opcje własności (Property Inspector) i ustawić pożądane parametry dla kontrolki. W oknie Inspector Property zawarte są parametry dla każdej wykorzystywanej kontrolki. Obsługa zdarzeń Zdarzenia w mat labie obsługiwane są za pośrednictwem następujących funkcji: Powyższe funkcje są dostępne dla kontrolek a w niektórych przypadkach dostępna ich tylko ich część. CreateFcn - funkcja jest wywoływana w trakcie generowania kontrolki po ustawieniu wszystkich jej parametrów i ma postać: function kontrolkaa_createfcn(hobject, eventdata, handles) hobject, identyfikator do kontrolki kontrolkaa eventdata, nieobsługiwane handles, uchwyty do wszystkich kontrolek (pusty do chwili wywołania wszystkich funkcji CreateFcn) DeleteFcn - funkcja jest wywoływana w trakcie usuwania kontrolki, przed usuwaniem jej parametrów function kontrolkaa_deletefcn(hobject, eventdata, handles)
ButtonDownFcn - funkcja jest wywoływana po kliknięciu myszą na kontrolką (jeżeli Enable jest ON) funkcje wywołuje RMB, gdy Enable jest OFF funkcja jest wywoływana przez obydwa przyciski function kontrolkaa_buttondownfcn(hobject, eventdata, handles) KeyPressFcn - funkcja jest wywoływana po naciśnięciu klawisza na aktywnej kontrolce. Dla spacji wywoływana jest funkcja KeyPressFcn a następnie CallBack, podczas gdy dla innych klawiszy wywoływana jest funkcja KeyPressFcn. function kontrolkaa_keypressfcn(hobject, eventdata, handles) CallBack - funkcja jest wywoływana gdy na kontrolce została wykonana właściwa akcja (np. dla przycisku wciśnięcie dla radiobutton oraz checkbox - zaznaczenie, dla slidera przesunięcie suwaka) function kontrolkaa_callback(hobject, eventdata, handles)
Dla kontrolki figure dostępnych jest ponadto pięć dodatkowych funkcji obsługujących zdarzenia: 1. WindowButtonDownFcn - funkcja jest wywoływana w chwili wciśnięcia lewego przycisku myszy w obszarze okna nad nieaktywną kontrolką lub tłem wykresu function figure1_windowbuttondownfcn(hobject, eventdata, handles) (pusty do chwili wywołania funkcji CreateFcn) 2. WindowButtonMotionFcn - funkcja jest wywoływana w trakcie poruszania kursorem nad obszarem okna lecz nie nad menu czy paskiem tytułowym function figure1_windowbuttonmotionfcn(hobject, eventdata, handles) 3. WindowButtonUpFcn - funkcja jest wywoływana w momencie zwolnienia przycisku myszy na obszarze okna nad nieaktywną kontrolką lub tłem wykresu function figure1_windowbuttonupfcn(hobject, eventdata, handles) 4. ResizeFcn - funkcja jest wywoływana w momencie zmiany rozmiaru okna function figure1_resizefcn(hobject, eventdata, handles) hobject identyfikator do kontrolki figure1 5. CloseRequestFcn - funkcja jest wywoływana w chwili gdy użytkownik chce zamknąć okno function figure1_closerequestfcn(hobject, eventdata, handles)
Odczyt i zmiana parametrów Do odczytu lub zmiany parametrów kontrolki wykorzystywane są poniższe funkcje: set w celu zmiany parametru set(handle,propertyname, PropertyValue,...) handle - uchwyt do kontrolki, która będzie modyfikowana PropertyName - nazwa zmienianego parametru PropertyValue - zmieniana wartość parametru... ew. kolejne pary parametrów get - do odczytu parametru get(handle,propertyname) handle - uchwyt do kontrolki, która będzie modyfikowana PropertyName - nazwa modyfikowanego parametru Uchwyty Uchwyty to mechanizm wykorzystywany przez matlaba celem identyfikacji kontrolek. Przedstawione poniżej metody przedstawiają sposoby uzyskiwania uchwytów do wybranych kontrolek: handles - zbiór uchwytów do wszystkich kontrolek (można go używać wewnątrz funkcji obsługujących zdarzenia) przy czym uzyskanie uchwytu do kontrolki następuje przez parametr handles.tag (tag oznacza nazwę kontrolki - przypisaną Tag) findobj('propertyname','propertyvalue') - funkcja zwraca uchwyty kontrolek których parametr PropertyName ma wartość PropertyValue (w przypadku gdy zwracana jest większa liczba takich kontrolek zwracany jest wektor uchwytów) hobject - Zawiera uchwyt do kontrolki na rzecz której wywoływana jest dana funkcja gcbo - uchwyt do kontrolki dla której funkcja CallBack jest aktualnie wykonywana gco - uchwyt do kontrolki (aktywnej) gca - uchwyt do wykresu (aktywnego)