Matlab - tworzenie graficznego interfejsu użytkownika GUI - Graphic User Interface Z.Rudnicki Sposoby wykorzystywania graficznych elementów dialogowych w programach Matlaba Generowanie elementów w oknie FIGURE poleceniami programu Wykorzystanie elementów tworzących własne okna dialogowe: UIGETFILE, INPUTDLG,... Rozmieszczanie elementów w oknie FIGURE z użyciem kreatora GUIDE 2 1
Generowanie elementów w oknie FIGURE poleceniami programu 3 Obiekty graficzne figure - okno graficzne uicontrol - element dialogowy axes - układ osi uimenu - menu użytkownika image - obraz line - linia (m.in. utworzona przez plot) patch - wielokąt surface - powierzchnia text - tekst light - źródło światła 4 2
Elementy sterujące uicontrol s Grupa obiektów uicontrol - to t.zw. "kontrolki czyli "elementy sterujące interfejsu użytkownika" (bo ui to user interface) a więc: przyciski, listy rozwijalne. i in. Polecenie: zm = uicontrol(f1, 'Naz_Cechy1', Wart1, 'Naz_Cechy2', Wart2,...) - tworzy kontrolkę w oknie o uchwycie F1 i nadaje jej określone cechy oraz zapamiętuje jej uchwyt w zmiennej zm. Typ kontrolki należy określić przy pomocy cechy Style, która może przyjąć jedną z wartości: 'pushbutton', 'togglebutton', 'radiobutton', 'checkbox', 'edit', 'text', 'slider', 'frame', 'listbox', 'popupmenu. 5 Typy kontrolek - cecha Style Typ obiektu uicontrol jest określony wartością cechy 'Style - jedną z następujących: 'PushButton' - przycisk, 'ToggleButton' - przełącznik, 'RadioButton' -przycisk wyboru jednego z wielu, 'CheckBox' -pole wyboru (wiele z wielu), 'Edit' -pole edycyjne do wpisywania lub zmiany treści, 'Text' -napis (etykieta tekstowa), 'Slider' -suwak, 'Frame' -ramka, 'Listbox' - lista, 'PopupMenu' -lista rozwijalna. Pominięcie cechy 'Style' to domyślne przyjęcie: 'PushButton'. 6 3
Ważniejsze cechy wybranych kontrolek Wartość cechy 'Style' Rodzaj kontrolki Ważne cechy i działanie pushbutton Przycisk set(uchwyt,'string', 'Napis na przycisku', 'Callback', 'Polecenie') - polecenie jest wykonywane po wciśnięciu przycisku myszką edit text Pole edycyjne do wpisywania lub zmiany treści Dowolny napis set(uchwyt,'string', ' tekst') wartość wpisaną w polu odczytamy przez: x = str2double(get(uchwyt, 'String')); set(uchwyt,'string', ' Napis') slider Suwak ustawiamy: set(uchwyt,'min', 'wart.min', 'Max', 'wart.maks') odczytujemy: x=get(uchwyt,'value'); popupmenu Lista rozwijalna definiujemy pozycje menu: set(uchwyt, 'String', ' opcja1 opcja2 opcja3'); odczytujemy: x=get(uchwyt,'value'); 7 Profil01.m - przykład programu z interfejsem graficznym - napisanego bez pomocy kreatora GUIDE L1 S1 A1 A2 PL1 8 4
Program do oglądania przekrojów obrazów c.d. % Profil01.m - to program do oglądania przekrojów obrazów % improfile(obraz, [Xp Xk], [Yp Yk]) - to funkcja przekroju clear; clc; [naz, dir]=uigetfile('*.bmp','wybierz plik obrazu do analizy'); A=imread([dir,naz]); % wczytuje obraz z pliku do macierzy A if isrgb(a), A=rgb2gray(A); end [Lw, Lk] = size(a); % rozmiary obrazu H=round(Lw/2); % rzedna pocz. linii przekroju %--------------------- F1=figure; % wyswietla okno grafczne set(f1,'position',[40 40 600 300]); % rozmiar i położenie figury F1 S1=uicontrol(gcf, 'Style','slider'); % definiuje suwak S1 set(s1,'position',[40 55 15 200]); % rozmiar i położenie suwaka S1 set(s1,'callback','ustaw'); % klikniecie wywołuje procedure USTAW set(s1,'min',1,'max',lw); % okreslenie zakresu suwaka set(s1,'value',h); % ustawienie pozycji suwaka %--------------- Y=improfile(A, [1 Lk], [H H]); % wyznacza przekrój obrazu A1=subplot(1,2,1); imshow(a); % w okienku A1: wyswietli obraz title(naz); L1=line([1 Lk],[H H]); % miejsce przekroju zaznaczone na obrazie A2=subplot(1,2,2); PL1=plot(Y); % w drugim okienku A2: wyswietli przekrój grid on; axis([0,lk, 0, 256]); title('przekrój poziomy'); xlabel('x'); ylabel('jasnosc'); 9 Procedura wywoływana kliknięciem suwaka c.d. % Ustaw.m % Podprogram ten jest wywoływany kliknieciem suwaka S1 H = get(s1,'value'); % odczyt położenia suwaka S1 % --- Nowa linia pozioma na obrazie: set(l1, 'XData',[1 Lk],'YData',[Lw-H Lw-H]); % --- Nowy wykres przekroju: Y=improfile(A, [1 Lk], [Lw-H Lw-H]); set(pl1, 'XData', 1:Lk-1,'YData',Y); 10 5
Wykorzystanie elementów tworzących własne okna dialogowe: UIGETFILE, INPUTDLG,... 11 Elementy tworzące własne okienka dialogowe można generować przy pomocy funkcji: inputdlg - wyświetla okno z polami edycyjnymi do wprowadzania danych, listdlg - wyświetla listę opcji do wyboru, msgbox - wyświetla okienko z komunikatem, printdlg - wyświetla okno do ustalania parametrów wydruku, printpreview - wyświetla okno z podglądem wydruku, questdlg - wyświetla okno z pytaniem i trzema przyciskami odpowiedzi, uigetdir - wyświetla okno do wyboru dysku i folderu, uigetfile - wyświetla standardowe okno otwierania plików, uiputfile - wyświetla standardowe okno zapisywania plików, uisetcolor - wyświetla okienko z kolorami do wyboru, uisetfont - wyświetla okno do ustalania parametrów czcionki. 12 6
Okno komunikatu - msgbox Funkcja msgbox pozwala wyświetlić okienko z komunikatem. Jej postaci: msgbox('komunikat') msgbox('komunikat', 'Tytuł', 'Ikona'), gdzie: 'Komunikat' - tekst komunikatu (wyrażenie typu string), 'Tytuł' - tytuł okna (na górnym pasku), 'Ikona' - to parametr który może mieć wartości: 'none', 'error', 'help', 'warn' lub 'custom', domyślnie - brak ikony czyli 'none'. Przykładowe polecenia: msgbox('przygotuj dane'); msgbox('nieprawidłowe dane!','błąd','error') msgbox('przeczytaj instrukcję','pomoc','help') msgbox('niebezpieczna operacja','ostrzeżenie','warn') 13 Okno wprowadzania danych - inputdlg Funkcja ta w najprostszej postaci może mieć budowę: Dane = inputdlg(pytania, Tytuł) Przykład: % Program PR wprowadza dane trzech osób: pytania={'imie', 'Nazwisko', 'Wiek'} for i=1:3 osoba{i} = inputdlg(pytania,'podaj dane:') end % ---- a teraz wyświetla te dane: osoba{1} osoba{2} osoba{3} Pytania muszą być elementami tabeli komórkowej a dane także zostaną wprowadzone do tabeli komórkowej. Tabela komórkowa może mieć elementy różnych typów a ich indeksy trzeba umieszczać w nawiasach klamrowych {}. 14 7
Okno wyboru folderów i plików - uigetfile Wywołanie funkcji ma postać: [nazwa_pliku, ścieżka] = uigetfile(filtr, tytuł) % Przykładowy program % pozwala wybrać plik obrazu % typu "*.bmp" % oraz wyświetli ten obraz. clear; t1='wybierz plik obrazu:'; [naz,folder]=uigetfile('*.bmp', t1); imshow(naz); % wyswietla obraz 15 Tworzenie GUI z pomocą kreatora GUIDE 16 8
Przykład: utworzyć program do obliczania pierwiastka kwadratowego z wpisanej liczby 17 Kreator GUIDE oraz Inspector cech W oknie komend wpisujemy: guide - pojawi się pusta formatka na którą można wstawiać elementy dialogowe z palety Wybrany kliknięciem element pokaże swoje cechy w oknie INSPECTOR Cechy te (np.: Color) można zmieniać w INSPECTORze Każdy element ma identyfikator istniejący jako wartość pola TAG 18 9
Tworzenie GUI programu PIERWIASTEK w kreatorze GUIDE 19 Zmienione cechy obiektów Typ TAG Cecha Wartość cechy String 'Obliczanie pierwiastka liczby' Static Text text1 FontSize 11 BackGroundColor [1 1 0] String 'Liczba =' Static Text text2 FontSize 11 BackGroundColor [1 1 0] String 'Pierwiastek =' Static Text text3 FontSize 11 BackGroundColor [1 1 0] Static Text String '' text4 FontSize 11 Edit Text String '' edit1 FontSize 11 String 'OBLICZ' Push Button pushbutton1 FontSize 11 Callback - ustawiona automatycznie 20 10
Funkcja pushbutton1_callback wywoływana kliknięciem przycisku OBLICZ Przycisk pushbutton1 ma wywołać funkcję która: odczyta tekst wpisany do pola edit1 i przekonwertuje go na liczbę, obliczy pierwiastek z tej liczby, wyświetli wynik w polu text4. Funkcja ta ma postać: %------------------------------------------------------------------------------------------------------ function pushbutton1_callback(hobject, eventdata, handles) % hobject - handle to pushbutton1 (see GCBO) % eventdata - reserved - to future version of MATLAB % handles - structure with handles and user data x = str2double(get(handles.edit1,'string')); y = sqrt(x); set(handles.text4,'string',num2str(y)); 21 11