Sunteți pe pagina 1din 7

Programarea componentelor GUI

Această secŃiune explică cum se programează Callback-ul (rutinele) pentru câteva


componente ale GUI. ProprietăŃile Callback-lui descriu diferitele tipuri de callback-uri.
Trebuie văzută pagina de proprietăŃi a componentei pentru a vedea ce callback-uri sunt
valabile pentru acea componenta. Inspectorul de proprietăŃi (Property Inspector) furnizează
link-uri către paginile cu proprietăŃi. Acest capitol prevede informaŃii către următoarele
elemente:

1. Buton Apasă (Push Button)

Butoanele Push Button generează o acŃiune când apăsaŃi (faceŃi click). Când faceŃi
click cu mouse-ul pe acest buton, el apare presat şi atunci când eliberaŃi mouse-ul, tasta apare
ridicată.
Setarea proprietăŃilor:
String - SetaŃi cu această proprietate şirul de caractere pe care doriŃi să-l afişaŃi pe
buton.
Tag – GUI utilizează proprietatea Tag pentru a numi subrutina de apel în fişierul M.

2. Buton Comutator (Toggle Button)

Callback-ul pentru un buton comutator trebuie să interogheze butonul pentru a


determina starea în care este. Matlab-ul setează proprietatea Valoare egală cu valoarea Max
când butonul este apăsat (activat) (Max este 1 implicit) şi este egal cu valoarea Min când
butonul nu este apăsat (Min este 0 implicit).

Codul următor ilustrează cum se programează callback-ul (rutina) în fişierul M al GUI:

function togglebutton1_Callback(hObject, eventdata, handles)


button_state = get(hObject,'Value');
if button_state == get(hObject,'Max')
% toggle button is pressed (butonul comutator este apăsat)
elseif button_state == get(hObject,'Min')
% toggle button is not pressed (butonul comutator nu este apăsat)
end

3. Buton Radio (Radio Buttons)

PuteŃi determina starea curentă a unui buton radio în cadrul Callback-ului interogând
starea proprietăŃii Valoare, ca în exemplul următor:

function radiobutton1_Callback(hObject, eventdata, handles)

if (get(hObject,'Value') == get(hObject,'Max'))
% then radio button is selected-take approriate action
% daca butonul radio este selectat – execută acŃiunea corespunzătoare
else
% radio button is not selected-take approriate action
% butonul radio nu este selectat - execută acŃiunea corespunzătoare
End
4. Casete de validare (Check Boxes)

PuteŃi determina starea curentă a unei casete de validare în cadrul callback-ului prin
interogarea stării proprietăŃii Valoare, ca în exemplul următor:

function checkbox1_Callback(hObject, eventdata, handles)

if (get(hObject,'Value') == get(hObject,'Max'))
% then checkbox is checked-take approriate action
% atunci caseta este selectată (bifată) - execută acŃiunea corespunzătoare
else
% checkbox is not checked-take approriate action
% caseta nu este selectată (bifată) - execută acŃiunea corespunzătoare
End

5. Editare text (Edit Text)

Pentru a obŃine şirul care a fost tastat în caseta editabilă (Edit text), se solicită
proprietatea String din Callback, ca în exemplul următor:

function edittext1_Callback(hObject, eventdata, handles)


user_string = get(hObject,'string');
% proceed with callback...
(% continuă cu callback ….)

Dacă se doreşte afişarea într-o zonă de text a unui şir de caractere sau a mărimilor
calculate anterior în program se introduc comenzile următoare:
set(handles.edit1,'String','Afiseaza curentul')
pentru afişarea textului Afiseaza curentul
respectiv,
set(handles.edit1,'String',num2str(y))
pentru afişarea mărimii y

Notă: Dacă în fereastra Property Inspector a unei casete text (Edit text) se setează
proprietatea Max cu 2, cu valoarea implicită 0 pentru Min, se permite utilizatorului să
selecteze linii multiple.

6. Afişare text (Static text )

Text static controlează linii de afişare text. Textul static este de obicei folosit pentru a
eticheta alte componente de control, furnizează direcŃii către utilizator, sau indică valorile
asociate cu un slider. Utilizatorii nu pot schimba textul static interactiv şi nu există nici o
modalitate de a apela rutina de apel asociată cu el.

7. Cursoare (Sliders)

Se poate determina valoarea curentă a unui cursor în cadrul callback-ului interogând


proprietatea Valoare, ca în exemplul următor:

function slider1_Callback(hObject, eventdata, handles)


slider_value = get(hObject,'Value');
% proceed with callback...(% continuă cu callback-ul …)
Exemplu de programare pentru slider combinat cu axes

function slider1_Callback(hObject, eventdata, handles)


a=get(handles.slider1,'Value');
x=1:0.1:50;
y=sin(x*a);
plot(handles.axes1,x,y) sau plot(x,y) – pentru Matlab 6.5 sau mai puŃin

Notă: ProprietăŃile Max şi Min specifică domeniul cursorului.

8. Rame (Frame)

Ramele sunt cutii care delimitează regiuni ale unei ferestre figură. Ramele pot face o
interfaŃă de utilizator mai uşor de înŃeles prin gruparea vizuală a controalelor legate. Ramele
nu au rutine de apel asociate acestora.
Dacă adăugaŃi un cadru (ramă) după adăugarea de componente pe care doriŃi să le
poziŃionaŃi în cadru, aveŃi nevoie să activaŃi aceste componente. Pentru aceasta, selectaŃi din
meniul Layout, Bring to Front şi Send to Back .

9. Casete cu liste (List Boxes)

Declanşarea execuŃiei Callback-ului

MATLAB-ul evaluează Callback-ul casetei cu liste după ce butonul mouse-lui este


eliberat sau după apăsarea unor taste.
- Tastele săgeŃi (←↑↓→) schimbă proprietatea Valoare şi declanşează execuŃia rutinei
(Callback-lui).
- “Enter” şi “Space” nu schimbă proprietatea Valoare dar declanşează execuŃia rutinei
(Callback-lui).

Dacă utilizatorul face dublu-click, rutina este executată după fiecare click. MATLAB-
ul setează Tipul SelecŃiei (Selection Type) la normal după primul click şi deschiderea după al
doilea click. Callback-ul poate interoga proprietatea Tipul SelecŃiei (Selection Type) pentru a
determina dacă a fost un simplu sau dublu click.

Programarea Casete cu liste (List Boxes):

function listbox1_Callback(hObject, eventdata, handles)


% hObject handle to listbox1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% Hints: contents = get(hObject,'String') returns listbox1 contents as cell array


% contents{get(hObject,'Value')} returns selected item from listbox1
val = get(hObject,'Value');
switch val
case 1
%………Primul element din listă
case 2
%………Al doilea element din listă
end
10. Meniuri care se deschid (Pop-Up Menus)

PuteŃi să programaŃi Callback-ul meniului Pop-Up pentru a verifica doar indexul


elementului selectat (conŃinut în proprietatea Valoare) sau puteŃi obŃine şirul actual conŃinut
în elementul selectat. Acest Callback verifică indexul elementului selectat şi foloseşte o
instrucŃiune de comutare pentru a executa acŃiunea bazată pe valoare.
Dacă conŃinutul meniului Pop-Up este fix, atunci puteŃi folosi această cale:

function popupmenu1_Callback(hObject, eventdata, handles)


val = get(hObject,'Value');
switch val
case 1
% Utilizator selectat - primul element
case 2
% Utilizator selectat – al doilea element
% urmează subrutina...
end

Acest apel obŃine şirul actual selectat în meniul pop-up. Se utilizează valoarea
indicelui din lista de şiruri de caractere. Această abordare poate fi utilă dacă programul
încarcă dinamic conŃinutul meniului pop-up bazat pe acŃiunea utilizatorului şi aveŃi nevoie să
obŃineŃi şirul selectat. Este necesar să se convertească valoarea returnată de proprietatea String
de la o matrice de celule într-un şir de caractere.
val = get(hObject,'Value');
string_list = get(hObject,'String');
selected_string = string_list{val};
% conversia de la o matrice de celule la un şir de caractere
% urmează subrutina...

11. Panouri (Panels) (începând cu Matlab 7)


Panourile grupează componentele GUI şi pot face interfaŃa utilizator mai prietenoasă
prin gruparea vizuală a controalelor corelate. Panoul derivat poate fi un alt panou şi grupuri de
butoane precum şi axe sau controale ale interfeŃei utilizator. PoziŃia fiecărei componente din
panou este interpretată relativ la panou. Dacă panoul este redimensionat, s-ar putea să doriŃi să
repoziŃionaŃi componentele.
Callback-ul următor execută şi obŃine proprietatea PoziŃie a panoului uipanel2 atunci
când acesta este redimensionat. Odată obŃinute valorile dimensiunilor conŃinute în
proprietatea PoziŃie, puteŃi modifica proprietăŃile PoziŃie ale subcomponentelor pentru a le
repoziŃiona. FolosiŃi proprietatea Children a panoului uipanel2 pentru a obŃine date despre
subcomponente.
Următorul cod prezintă un exemplu de redimensionare:

function uipanel2_ResizeFcn(hObject, eventdata, handles)


% hObject handle to uipanel2
(% hObject indică uipanel2)
% eventdata reserved - to be defined in a future version of MATLAB
(% eventdata rezervat – va fi definit într-o versiune ulterioară a MATLAB)
% handles structure with handles and user data (see GUIDATA)
(% handles structura cu pointere şi date utilizator (vezi GUIDATA))
pos = get(hObject,'Position');
% proceed with callback...
(% continuă callback-ul...)
12. Grupuri de butoane (Button Groups) – începând cu Matbal 7
Grupurile de butoane sunt similare panourilor dar pot fi utilizate pentru a gestiona
comportarea selecŃiilor exclusive specifice butoanelor radio şi butoanele comutatoare.
Callback-ul SelectionChangeFcn a grupului de butoane este apelat de fiecare dată când se
face o selecŃie. Pentru butoanele radio şi butoanele comutatoare, care sunt gestionate de un
grup de butoane, trebuie să includeŃi şi codul pentru controlul lor in funcŃia Callback
SelectionChangeFcn a grupului de butoane, şi nu în funcŃiile Callback de control individuale.
Un grup de butoane suprascrie proprietăŃile Callback-ului butoanelor radio şi
butoanelor comutatoare pe care le gestionează.
Acest exemplu de SelectionChangeFcn Callback foloseşte proprietatea SelectedObject a
grupului de butoane pentru a obŃine pointer-ul butonului comutator sau butonului radio
selectat. El utilizează apoi proprietatea Tag a obiectului selectat pentru a alege codul
corespunzător ce va fi executat.

function uibuttongroup1_SelectionChangeFcn(hObject,eventdata,handles)
% hObject handle to uipanel1 (% hObject indică uipanel1)
% eventdata reserved - to be defined in a future version of MATLAB
(% eventdata rezervat - va fi definit într-o versiune ulterioară a MATLAB)
% handles structure with handles and user data (see GUIDATA)
(% handles structura cu pointere şi date utilizator (vezi GUIDATA))
selection = get(hObject,'SelectedObject');
switch get(selection,'Tag')
case 'radiobutton1'
% code piece when radiobutton1 is selected goes here
(% codul ce se executa când butonul radio 1 este selectat)
case 'radiobutton2'
% code piece when radiobutton2 is selected goes here
(% codul ce se executa când butonul radio 2 este selectat)
end

13. Axe (Axes)


Componentele Axe (Axes) permit interfeŃei utilizator să afişeze grafice şi imagini. Ca
toate obiectele grafice, axele au proprietăŃi pe care le puteŃi seta pentru a controla multe
elemente ale comportării şi aspectului lor. VedeŃi Axes Properties în documentaŃia Matlab
Graphics pentru informaŃii generale despre obiectele Axes.
Rutina Axe (Axes Callbacks)

Componentele Axes nu sunt obiecte de control individual, dar pot fi programate să


execute o rutină când utilizatorii fac click pe butonul mouse-ului, cursorul fiind deasupra
axelor. FolosiŃi proprietatea ButtonDownFcn a Axes pentru a defini callback-ul.

Trasarea unui grafic în axe în GUI

Dacă interfaŃa grafică conŃine axe, trebuie să verificaŃi că opŃiunea Command-line


accessibility, din cadrul opŃiunilor GUI (GUI Options) din meniul Tools al GUI, este setată la
valoarea Callback (implicit). Acesta vă permite să daŃi comenzi de plotare în cadrul unui
callback fără specificarea explicită a axelor destinatare. Pentru mai multe detalii asupra
modului cum funcŃionează această opŃiune vezi descrierea opŃiunii Command-Line
Accessibility.
Nota: Dacă interfaŃa dumneavoastră. grafică este deschisă ca urmare a rulării unui
callback a altei interfeŃe grafice, s-ar putea să trebuiască să specificaŃi explicit axele
destinatar. Vezi GUIs with Multiple Axes.

14. Controale ActiveX (ActiveXControls)

Dacă rulaŃi MATLAB sub Microsoft Windows, puteŃi insera controale ActiveX in
interfaŃa dvs. grafică (GUI). Când se plasează o componenta ActiveX, din paleta de
componente, în aria de lucru, GUIDE va afişa o caseta de dialog (Select an ActiveX Control)
prin intermediul căreia puteŃi să selectaŃi orice control ActiveX înregistrat în sistemul dvs.
Când se selectează un control ActiveX şi se face click pe Create, controlul apare ca o mică
casetă în editorul interfeŃei PuteŃi apoi programa controlul ActiveX să facă ceea ce trebuie să
facă.

15. Figuri (Figures)

Figurile sunt ferestre ce conŃin interfeŃele dvs. grafice (GUI) pe care le proiectaŃi cu
ajutorul editorului de interfaŃă (Layout Editor). Pentru a vedea ce caracteristici ale figurii le
puteŃi controla vedeŃi pagina de referinŃă Figure Properties.

Afişarea ploturilor într-o figură separată


Pentru a evita ca o figură să devină o destinaŃie a comenzilor de plotare date în linia
de comanda sau de o altă interfaŃă grafică (GUI), puteŃi seta proprietăŃile HandleVisibility şi
IntegerHandle la valoarea off. Totuşi, aceasta va face ca figura să fie ascunsă şi pentru
comenzile de plotare emise de GUI-ul dvs.
Pentru a emite comenzi de plotare din GUI-ul dvs, parcurgeŃi următoarele etape:
• CreaŃi o figură şi axele;
• SalvaŃi pointeri-i (handle) figurii în structura handles;
• CreaŃi un sistem de axe, salvaŃi pointerii (handle) acestuia şi setaŃi proprietatea
Parent la poiter-ul (handle) figurii
• CreaŃi graficul, salvaŃi pointere-le (handles) acestora şi setaŃi-le proprietăŃile Parent
ca pointere (handle) ale axelor.

Codul următor ilustrează aceşti paşi:

fHandle = figure('HandleVisibility','off','IntegerHandle','off, 'Visible','off');


aHandle = axes('Parent',fHandle);
pHandles = plot(PlotData,'Parent',aHandle);
set(fHandle,'Visible','on')

13. Ştergere figuri

Sintaxă:
cla
cla reset

cla - Şterge din axele curente toate obiectele grafice ale căror proprietăŃi nu sunt ascunse.
cla reset - Şterge din axele curente toate obiectele grafice, indiferent de setarea
proprietăŃii HandleVisibility şi resetează toate proprietăŃile lor, cu excepŃia poziŃiei şi unităŃii
de măsură, la valorile lor implicite.

Sintaxă:
clf
clf reset

clf - Şterge din figura curentă toate obiectele grafice ale căror proprietăŃi nu sunt ascunse
(de exemplu, proprietatea HandleVisibility este activată (are valoarea on)).
clf reset - Şterge din figura curentă toate obiectele grafice, indiferent de setarea
proprietății HandleVisibility şi resetează toate proprietăŃile figurii, cu excepŃia poziŃiei, a
unităŃilor de măsură, poziŃiei componentelor, la valorile lor implicite.

S-ar putea să vă placă și