You are on page 1of 5

chng 3: Giao din ho GUI

1. Khi nim chung tin dng ta c th to nn giao din ho(GUI - Graphic User Interface) gia ngi dng v MATLAB. Trong giao din ny ta c th xut d liu di 2 dng: vn bn v ho. Mi mt GUI c mt hay nhiu layout(din mo). to ra v x l layout cia GUI ta nhp ln guide v nhn c mt layout rng v ca s Guide Control Panel. Vic to GUI to nn mt cng c ho phc v nhp xut d liu mt cch trc gic, rt thun tin. Ngoi ra c th dng GUI gim st cc qu trnh, hin th cc i tng. 2. nhp xut k t, s liu ra GUI 1. To khung hnh: Ta xt cc lnh sau: f = input('Enter temperature(degree K): '); c = (f - 32)*5/9; fprintf(1,'Temperature(degree C) is: %g\n',c) Ba dng lnh trn thc hin cc cng vic sau: - nhp gi tr u vo - thc hin php tnh quy i nhit - xut kt qu ra mn hnh By gi ta tm cch ci cc dng lnh trn sao cho chng thc hin trn khun kh mt khung ho no . to hai khung hnh ch nht trong ca s Figure hin hnh vi nn mu xm ta nhp vo cc lnh 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 cc gc di tri l (0.1, 0.1) v (0.1, 0.6), cng chiu cao 0.3 n v v b rng 0.8 n v. n v c tnh bng % ca kch c ngoi ca Figure. Vy ta c th din gii nh sau: - Khung th nht cgc tri di ti im c to 10% chiu ngang v 10% chiu cao ca khung ngoi Figure. - Khung th 2 c gc tri pha di ti im c to ng vi 10% chiu ngang v 60% chiu cao ca khung ngoa Figure. - C hai khung c chiu cao bng 30% chiu cao v b ngang bng 80% b ngang ca khung ngoi Figure. 2. Dng lnh edit v text nhp xut k t v s liu: Trn y ta dng lnh uicontrol to v xc nh v tr hai khung hnh. on lnh sau y dng uicontrol vit chui k t Fahrenheit ln khung bn trn: text_f_=uicontrol(gcf,'Style','Text','String','Fahrenheit: ',... 'Position',[0.3 0.7 0.2 0.05],'HorizontalAlignment','Left'); Chui k t Fahrenhaeit c t vo ng v tr dn tri ca c Position ghi trong on chng trnh trn. on lnh sau dng Edit vit chui k r 68.0 vo v tr bn cnh ca Fahrenheit. Chui k t c v tr dn phi 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 dng edit, chui k t 68.0 l chui c th vit li c trc tip trn GUI. Sau khi nhn nt trn, gi tr mi vit li c tip nhn v MATLAB s gi lnh vit trong phn callback: fc_calc. Cui cng ta cn phi dng uicontrol to ta chui text, hin th chui Celcius v 20.0 trong khung bn di. 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'); thun tin ta nn vit cc lnh ny ny trong mt file script. 3. T ng cp nht gi tr ln GUI: hon thin v d GUI ta thc hin chng trnh vi nhim v tnh quy i t K sang C v t ng in kt qu vo cc bn ch chui Celcius. on chng trnh ny phc v mc ch callback (hon tr gi tr) c lu vo file fc_calc.m v c ni dung nh sau: f = get(edit_f_,'String'); f = str2num(f); c = (f-32)*5/9; c = num2str(c); set(text_c2_,'String',c); on m trn nhn gi tr do lnh uicontrol edit c vo di dng chui (string) v sau : - bin i t dng string sang dng s - tnh quy i t nhit fahrenheit sang nhit celcius - bin i t s sang string - xut kt qu di dng string ra GUI nh text_c2_ 3. nhp s liu t thanh trt Ngoa cch nhp s liu t bn phm, ta c th nhp s liu t thanh trt. MATLAB ch h tr cc thanh trt nm ngang ch khng h tr cc thanh trt thng ng. to thanh trt ta dng lnh: 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 vy Callback c th gi mt chui cc lnh MATLAB, phn cch nhau bng du chm than hay du phy. Chui callback gi fc_silder_f.m: f = get(slider_f_,'Value'); f = num2str(f); set(edit_f_,'String',f); vi tc dng nhp nhit gi ti Value ca slider_f_ vo v tr bn cnh cha chui Fahrenheit. Sau Callback gi tip fc_calc.m tnh quy i gi tr nhit v gn vo cnh chui Celcius. Tuy nhin nhp c gi tr mi do ngi dng thanh trt gy nn , ta phi thay i li chui lnh 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 nhim v cp nht gi tr gi ti Value ca slider_f_ ri sau fc_calc.m lm nt phn vic cn li: tnh i nhit v gn vo v tr cnh cha chui Celcius. 4. nhp s liu tu chn 1. Khi nim chung: Ngoi kh nng nhp d liu c nh theo kiu string hay kiu s, ta c th nhp d liu theo mt danh mc no . minh ho, ta to 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 ca s lnh, nhp lnh test th MATLAB s hi nhit v ch quy i ri hin th kt qu. Tuy hhin cng c GUI ca MATLAB cho php ta thc hin vic la chn thun li hn. ta c th chn mt trong 4 phng n nhp d liu sau y: - dng menu - dng list box - dng radio button - dng check box 2. Dng menu: ta xo b chui Celcius trong lnh text_c1_ v thay vo kh nng chn 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 kch chut vo Popup Menu , c ba kh nng chn la s xut hin. Tip tc nhy chut vo mt trong 3 kh nng , Popup Menu bin mt ch cn li n v c chn. Khi dng chut ko thanh trt frame pha trn, ta c c gi tr quy i sang n v c chn hin th pha di. Trong on chng trnh trn, gi tr Value t sn l 2. Khi Callback gi fc_popup_c.m: choice = get(popup_c_,Value); h gi tr ca bin choice c a ti Value. Sau Callback gi tip fc_calc2.m xem kt 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); Cn lu rng t c kt qu , ta cn phi bo cho edit v slider uicontrol bit dng fc_calc2.m bng cch b sung thm cc dng sau: set(edit_f_,... Callback,fc_edit_f;fc_calc2); set(edit_f_,... Callback,fc_slider_f;fc_calc2); Bng cch thay Popupmenu bng Listbox uicontrol ta c phng n listbox. im khc duy nht l khi chn, Popupmenu ch cha mt phn t th listbox c th ng thi cha nhiu phn t, ph thuc duy nht vo chiu cao ti v tr(Position property). 3. Dng radio button: Ta dng lnh delete(popup_c_) xo uicontrol to Popup Menu Rankine | Celcius | Kelvin v thm vo 3 uicontrol to 3 nt chn th nguyn nhit 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 dng mt chui Callback cho c 3 nt. Trc ht Callbackgi fc_radio_c.m nh bit nt no(1, 2 hay 3) c chn, sau ct gi tr bin c chn vo 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; on script trn l mt vng lp, so snh s (handle) Callback thu c (gi tr do hm gcbo tr v) vi handle ca mi nut. Nt no c s trng s c ng (turn on, Value = 1) v ntno khc s s b ngt (turn off,Value = 0). Cui cng Callback gi fc_calc2.m thc hin vic tnh quy i c chn v hin th kt qu.

5. cc phng php to gui 1. To GUI bng cng c ho: Trn y ta xem xt cch to GUI bng phng php th cng. Ta c th to GUI bng cng c ho. Khi nhp lnh guide ta gi trnh ho son tho layout. Kt qu u tin l ta c mt layout rng. Vic u tin

You might also like