Giáo trình Matlab cơ bản - Chương 3: Giao diện đồ họa GUI

ch−¬ng 3: Giao diÖn ®å ho¹ GUI  
§1. Kh¸i niÖm chung  
§Ó tiÖn dông ta cã thÓ t¹o nªn giao diÖn ®å ho¹(GUI - Graphic User Interface) gi÷a  
ng−êi dïng vµ MATLAB. Trong giao diÖn nµy ta cã thÓ xuÊt d÷ liÖu d−íi 2 d¹ng: v¨n b¶n vµ  
®ß ho¹. Mçi mét GUI cã mét hay nhiÒu layout(diÖn m¹o). §Ó t¹o ra vµ xö lÝ layout ciña GUI  
ta nhËp lÖn guide vµ nhËn ®−îc mét layout rçng vµ cöa sæ Guide Control Panel. ViÖc t¹o  
GUI t¹o nªn mét c«ng cô ®å ho¹ phôc vô nhËp xuÊt d÷ liÖu mét c¸ch trùc gi¸c, rÊt thuËn  
tiÖn. Ngoµi ra cã thÓ dïng GUI ®Ó gi¸m s¸t c¸c qu¸ tr×nh, hiÓn thÞ c¸c ®èi t−îng.  
§2. nhËp xuÊt kÝ tù, sè liÖu ra GUI  
1. T¹o khung h×nh: Ta xÐt c¸c lÖnh sau:  
f = input('Enter temperature(degree K): ');  
c = (f - 32)*5/9;  
fprintf(1,'Temperature(degree C) is: %g\n',c)  
Ba dßng lÖnh trªn thùc hiÖn c¸c c«ng viÖc sau:  
- nhËp gi¸ trÞ ®Çu vµo  
- thùc hiÖn phÐp tÝnh quy ®æi nhiÖt ®é  
- xuÊt kÕt qu¶ ra mµn h×nh  
B©y giê ta t×m c¸ch cµi c¸c dßng lÖnh trªn sao cho chóng thùc hiÖn trªn khu«n khæ mét  
khung ®å ho¹ nµo ®ã. §Ó t¹o hai khung h×nh ch÷ nhËt trong cöa sæ Figure hiÖn hµnh víi nÒn  
mµu x¸m ta nhËp vµo c¸c lÖnh sau:  
set(gcf,'DefaultUicontrolUnit','Normalized')  
frame1_ = uicontrol(gcf,'Style','Frame','Position',[0.1 0.1 0.8 0.3]);  
frame2_ = uicontrol(gcf,'Style','Frame','Position',[0.1 0.6 0.8 0.3]);  
set(frame1_,'BackgroundColor',[0.5 0.5 0.5]);  
set(frame2_,'BackgroundColor',[0.5 0.5 0.5]);  
Hai khung (Frames) cã to¹ ®é c¸c gãc d−íi tr¸i lµ (0.1, 0.1) vµ (0.1, 0.6), cïng chiÒu cao 0.3  
®¬n vÞ vµ bÒ réng 0.8 ®¬n vÞ. §¬n vÞ ®−îc t×nh b»ng % cña kÝch c÷ ngoµi cña Figure. VËy ta  
cã thÓ diÔn gi¶i nh− sau:  
- Khung thø nhÊt cèÝgc tr¸i d−íi t¹i ®iÓm cã to¹ ®é 10% chiÒu ngang vµ 10% chiÒu  
cao cña khung ngoµi Figure.  
- Khung thø 2 cã gãc tr¸i phÝa d−íi t¹i ®iÓm cã to¹ ®ä øng víi 10% chiÒu ngang vµ  
60% chiÒu cao cña khung ngo×a Figure.  
- C¶ hai khung cã chiÒu cao b»ng 30% chiÒu cao vµ bÒ ngang b»ng 80% bÒ ngang cña  
khung ngoµi Figure.  
2. Dïng lÖnh edit vµ text ®Ó nhËp xu¸t kÝ tù vµ sè liÖu: Trªn ®©y ta ®· dïng lÖnh uicontrol  
®Ó t¹o vµ x¸c ®Þnh vÞ trÝ hai khung h×nh. §o¹n lÖnh sau ®©y dïng uicontrol ®Ó viÕt chuçi kÝ tù  
“Fahrenheit” lªn khung bªn trªn:  
text_f_=uicontrol(gcf,'Style','Text','String','Fahrenheit: ',...  
'Position',[0.3 0.7 0.2 0.05],'HorizontalAlignment','Left');  
Chuçi kÝ tù “Fahrenhaeit” ®−îc ®Æt vµo ®óng vÞ trÝ dån tr¸i cña « cã Position ghi trong ®o¹n  
ch−¬ng tr×nh trªn. §¹on lÖnh sau dïng Edit ®Ó viÕt chuçi kÝ rù “68.0” vµo vÞ trÝ bªn c¹nh cña  
“Fahrenheit”. Chuçi kÝ tù cã vÞ trÝ dån ph¶i trong « (Position Box).  
edit_f_=uicontrol(gcf,'Style','edit','String','68.0’...  
,'Position',[0.6 0.7 0.2  
0.05],'HorizontalAlignment','Right,’Callback’,’fc_calc');  
Do sö dông edit, chuçi kÝ tù “68.0” lµ chuçi cã thÓ viÕt l¹i ®−îc trùc tiÕp trªn GUI. Sau khi  
nhÊn nót trªn, gi¸ trÞ míi viÕt l¹i ®−îc tiÕp nhËn vµ MATLAB sÏ gäi lÖnh viÕt trong phÇn  
callback: fc_calc.  
Cuèi cïng ta cßn ph¶i dïng uicontrol ®Ó t¹o ta chuçi text, hiÓn thÞ chuçi “Celcius” vµ  
“20.0” trong khung bªn d−íi.  
text_c1_= uicontrol(gcf,'Style','Text','String','Celcius: ',...  
'Position',[0.3 0.3 0.2 0.05],'HorizontalAlignment','Left');  
text_c2_= uicontrol(gcf,'Style','Text','String','20.0','Position',...  
[0.6 0.3 0.1 0.05],'HorizontalAlignment','Left');  
§Ó thuËn tiÖn ta nªn viÕt c¸c lÖnh nµy nµy trong mét file script.  
3. Tù ®éng cËp nhËt gi¸ trÞ lªn GUI: §Ó hoµn thiÖn vÝ dô GUI ta thùc hiÖn ch−¬ng tr×nh  
víi nhiÖm vô tÝnh quy ®æi tõ ®é K sang ®é C vµ tù ®éng ®iÒn kÕt qu¶ vµo c¸c « bªn ¹ch  
chuçi Celcius. §o¹n ch−¬ng tr×nh nµy phôc vô môc ®Ých callback (hoµn tr¶ gi¸ trÞ) ®−îc l−u  
vµo file fc_calc.m vµ cã néi dung nh− sau:  
f = get(edit_f_,'String');  
f = str2num(f);  
c = (f-32)*5/9;  
c = num2str(c);  
set(text_c2_,'String',c);  
§o¹n m· trªn nhËn gi¸ trÞ do lÖnh uicontrol “edit” ®äc vµo d−íi d¹ng chuçi (string) vµ sau  
®ã:  
- biÕn ®æi tõ d¹ng string sang d¹ng sè  
- tÝnh quy ®æi tõ nhiÖt ®é fahrenheit sang nhiÖt ®é celcius  
- biÕn ®æi tõ sè sang string  
- xuÊt kÕt qu¶ d−íi d¹ng string ra GUI nhê text_c2_  
§3. nhËp sè liÖu tõ thanh tr−ît  
Ngo×a c¸ch nhËp sè liÖu tõ bµn phÝm, ta cã thÓ nhËp sè liÖu tõ thanh tr−ît. MATLAB  
chØ hç trù c¸c thanh tr−ît n»m ngang chø kh«ng hç trî c¸c thanh tr−ît th¼ng ®øng. §Ó t¹o  
thanh tr−ît ta dïng lÖnh:  
slider_f_ = uicontrol(gcf,'Style','Slider','Min',...  
32.0,'Max',212.0,'Value',68.0,'Position',[0.6 0.8 0.2 0.05],...  
'Callback','fc_slider_f;fc_calc');  
Nh− vËy Callback cã thÓ gäi mét chuçi c¸c lÖnh MATLAB, ph©n c¸ch nhau b»ng dÊu chÊm  
than hay dÊu phÈy. Chuçi callback gäi fc_silder_f.m:  
f = get(slider_f_,'Value');  
f = num2str(f);  
set(edit_f_,'String',f);  
víi t¸c dông nhËp nhiÖt ®é gi÷ t¹i ‘Value’ cña slider_f_ vµo vÞ trÝ bªn c¹nh « chøa chuçi  
“Fahrenheit”. Sau ®ã Callback gäi tiÕp fc_calc.m ®Ó tÝnh quy ®æi gi¸ trÞ nhiÖt ®é vµ g¸n vµo  
« c¹nh chuçi “Celcius”. Tuy nhiªn ®Ó nhËp ®−îc gi¸ trÞ míi do ng−êi dïng thanh tr−ît g©y  
nªn , ta ph¶i thay ®æi l¹i chuçi lÖnh nh− sau:  
slider_f_ = uicontrol(gcf,'Style','Slider','Min',...  
32.0,'Max',212.0,'Value',68.0,'Position',[0.6 0.8 0.2 0.05],...  
'Callback','fc_edit_f, fc_calc');  
Trong ®ã file fc_edit_f.m nh− sau:  
f = get(edit_f_,'String');  
f= str2num(f);  
set(slider_f_,'Value',f);  
cã nhiÖm vô cËp nhËt gi¸ trÞ gi÷ t¹i ‘Value’ cña slider_f_ ®Ó råi sau ®ã fc_calc.m lµm nèt  
phÇn viÖc cßn l¹i: tÝnh ®æi nhiÖt ®é vµ g¸n vµo vÞ trÝ c¹nh « chøa chuçi “Celcius”.  
§4. nhËp sè liÖu tuú chän  
1. Kh¸i niÖm chung: Ngoµi kh¶ n¨ng nhËp d÷ liÖu cè ®Þnh theo kiÓu string hay kiÓu sè, ta  
cã thÓ nhËp d÷ liÖu theo mét danh môc nµo ®ã. §Ó minh ho¹, ta t¹o file test.m nh− sau:  
f = input('Nhap nhiet do: ');  
r = f+459.7;  
c = (f-32)*5/9;  
k = c+273.15;  
choice = input(['Nhap 1 cho Rankie','2 cho Celcius','3 cho Kelvin: ']);  
if choice==1  
fprintf(1,'Nhiet do (do R) la: %g\n',r);  
elseif choice==2  
fprintf(2,'Nhiet do (do C) la: %g\n',c);  
elseif choice==3  
fprintf(2,'Nhiet do (do C) la: %g\n',c);  
end  
Tõ cöa sæ lÖnh, nhËp lÖnh test th× MATLAB sÏ hái nhiÖt ®é vµ ®Ých quy ®æi råi hiÓn thÞ kÕt  
qu¶. Tuy hhiªn c«ng cô GUI cña MATLAB cho phÐp ta thùc hiÖn viÖc lùa chän thuËn lîi  
h¬n. ta cã thÓ chän mét trong 4 ph−¬ng ¸n nhËp d÷ liÖu sau ®©y:  
- dïng menu  
- dïng list box  
- dïng radio button  
- dïng check box  
2. Dïng menu: ta xo¸ bá chuçi “Celcius” trong lÖnh text_c1_ vµ thay vµo ®ã kh¶ n¨ng chän  
theo popup menu nh− sau:  
delete(text_c1_);  
pop_c_ = uicontrol( gcf,  
‘Style’,  
‘String’,  
‘Value’,  
‘Popupmenu’,...  
‘Rankine|Celcius|Kelvin’,...  
2,...  
‘Position’, [0.0 .3 0.2 0.05],...  
‘Callback’, ‘fc_popup_c;fc_calc2’);  
Khi kÝch chuét vµo Popup Menu , cã ba kh¶ n¨ng chän lùa sÏ xuÊt hiÖn. TiÕp tôc nh¸y chuét  
vµo mét trong 3 kh¶ n¨ng ®ã , Popup Menu biÕn mÊt chØ cßn l¹i ®¬n vÞ ®−îc chän. Khi dïng  
chuét kÐo thanh tr−ît ë frame phÝa trªn, ta cã ®−îc gi¸ trÞ quy ®æi sang ®¬n vÞ ®−îc chän  
hiÓn thÞ ë phÝa d−íi. Trong ®o¹n ch−¬ng tr×nh trªn, gi¸ trÞ ‘Value’ ®Æt s½n lµ 2. Khi Callback  
gäi fc_popup_c.m:  
choice = get(popup_c_,’Value’);  
h× gi¸ trÞ cña biÕn choice ®−îc ®−a tíi ‘Value’. Sau ®ã Callback gäi tiÕp fc_calc2.m ®Ó xem  
kÕt qu¶ gi÷ trong choice. File fc_calc2.m nh− sau:  
f = get(edit_f_,'String');  
f = str2num(f);  
r= f+459.7;  
c = (f-32)*5/9;  
k = c+273.15;  
choice = input(['Nhap 1 cho Rankie','2 cho Celcius','3 cho Kelvin: ']);  
if choice==1  
t = r;  
elseif choice==2  
t = c;  
elseif choice==3  
t= k  
end  
t = num2str(t);  
set(text_c2_,'String',t);  
CÇn l−u ý r»ng ®Ó ®¹t ®−îc kÕt qu¶ , ta cßn ph¶i b¸o cho edit vµ slider uicontrol biÕt ®Ó dïng  
fc_calc2.m b»ng c¸ch bæ sung thªm c¸c dßng sau:  
set(edit_f_,...  
‘Callback’,’fc_edit_f;fc_calc2’);  
set(edit_f_,...  
‘Callback’,’fc_slider_f;fc_calc2’);  
B»ng c¸ch thay ‘Popupmenu’ b»ng ‘Listbox’ uicontrol ta cã ph−¬ng ¸n listbox. §iÓm  
kh¸c duy nhÊt lµ khi chän, Popupmenu chØ chøa mét phÇn tö th× listbox cã thÓ ®ång thêi  
chøa nhiÒu phÇn tö, phô thuéc duy nhÊt vµo chiÒu cao t¹i vÞ trÝ(‘Position’ property).  
3. Dïng radio button: Ta dïng lÖnh delete(popup_c_) ®Ó xo¸ uicontrol t¹o Popup Menu  
“Rankine | Celcius | Kelvin” vµ thªm vµo 3 uicontrol t¹o 3 nót chän thø nguyªn nhiÖt ®é sau:  
delete(popup_c_);  
strings = [‘Rankine’;’Celcius’;’Kelvin’];  
show = [  
ys = [  
0
3
;
;
1
2
;
;
0 ];  
1]* 0.075 + 0.075;  
for i = 1:3  
radio_c_(i) = uicontrol( gcf,  
‘Style’,‘Radiobutton’,...  
‘String’,  
‘Value’,  
strings(i),...  
show(i),...  
‘Posiotion’, [0.3 ys(i) 0.0 0.05],...  
‘Callback’, ‘fc_radio_c;fc_calc2’);  
ta dïng mét chuçi Callback cho c¶ 3 nót. Tr−íc hÕt Callbackgäi fc_radio_c.m ®Ó nhË biÕt  
nót nµo(1, 2 hay 3) ®−îc chän, sau ®ã cÊt gi¸ trÞ biÕn ®−îc chän vµo choice.  
for i = 1:3  
if gcbo == radio_c_(i)  
choice = i;  
set(radio_c_(i),’Value’,1);  
else  
set(radio_c_(i),’Value’,0);  
end;  
end;  
§o¹n script trªn lµ mét vßng lÆp, so s¸nh sè (handle) Callback thu ®−îc (gi¸ trÞ do  
hµm gcbo tr¶ vÒ) víi handle cña mçi nut. Nót nµo cã sã trïng sÏ ®−îc ®ãng (turn on, ‘Value’  
= 1) vµ nótnµo kh¸c sè sÏ bÞ ng¾t (turn off,’Value’ = 0). Cuèi cïng Callback gäi fc_calc2.m  
®Ó thùc hiÖn viÖc tÝnh quy ®æi ®−îc chän vµ hiÓn thÞ kÕt qu¶.  
§5. c¸c ph−¬ng ph¸p t¹o gui  
1. T¹o GUI b»ng c«ng cô ®å ho¹: Trªn ®©y ta ®· xem xÐt c¸ch t¹o GUI b»ng ph−¬ng ph¸p  
thñ c«ng. Ta cã thÓ t¹o GUI b»ng c«ng cô ®å ho¹. Khi nhËp lÖnh guide ta gäi tr×nh ®å ho¹ ®Ó  
s¹on th¶o layout. KÕt qu¶ ®Çu tiªn lµ ta cã mét layout rçng. ViÖc ®Çu tiªn  
pdf 5 trang myanh 18321 Free
Bạn đang xem tài liệu "Giáo trình Matlab cơ bản - Chương 3: Giao diện đồ họa GUI", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

File đính kèm:

  • pdfgiao_trinh_matlab_co_ban_chuong_3_giao_dien_do_hoa_gui.pdf