Chuong3

119 views

Published on

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
119
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
1
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Chuong3

  1. 1. 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: %gn',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');
  2. 2. 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);
  3. 3. 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: %gn',r); elseif choice==2 fprintf(2,'Nhiet do (do C) la: %gn',c); elseif choice==3 fprintf(2,'Nhiet do (do C) la: %gn',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’, ‘Popupmenu’,... ‘String’, ‘Rankine|Celcius|Kelvin’,... ‘Value’, 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: ']);
  4. 4. 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 = [ 0 ; 1 ; 0 ]; ys = [ 3 ; 2 ; 1]* 0.075 + 0.075; for i = 1:3 radio_c_(i) = uicontrol( gcf, ‘Style’,‘Radiobutton’,... ‘String’, strings(i),... ‘Value’, 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. 5. §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

×