Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 13 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
13
Dung lượng
349,36 KB
Nội dung
CHNG3:GIAODINĐHOGUI §1.KHÁINIMCHUNG Đ tin dng ta có th to nên giao dinđho(GUIGraphic User Interface)giangidùngvàMATLAB.Tronggiaodinnàytacóthxutd liu di 2 dng: văn bn vàđho. Mi mt GUI có mt hay nhiu layout(dinmo).VictoGUItonênmtcôngcđhophcvnhpxut dliumtcáchtrcgiác,rtthuntin.Ngoài racóthdùngGUIđgiám sátcácquátrình,hinthcácđitng. §2.NHPXUTKÝT,SLIURAGUI 1.Tokhunghình:Taxétcáclnhsau(luvàofilect3_0.m): f=input(Nhapnhietdo(doK):); c=(f32)*5/9; fprintf(1,nhietdo(doC)la:%g\n,c) Badòngl nhtrênthchincáccôngvicsau: nhpgiátrđuvào thchinphéptínhquyđinhitđ xutktquramànhình Bâygitatìmcáchcàicácdònglnhtrênsaochochúng thchintrên khuônkhmtkhungđhocódngsau: Cáclnhsau(luvàofilect3_1.m)thchincôngvictrên: 42 set(gcf,DefaultUicontrolUnit,Normalized) frame_1=uicontrol(gcf,Style,Frame, . Position,[0.10.10.80.3]); frame_2=uicontrol(gcf,Style,Frame, . Position,[0.10.60.80.3]); set(frame_1,BackgroundColor,[0.50.50.5]); set(frame_2,BackgroundColor,[0.50.50.5]); text_f=uicontrol(gcf,Style,Text, . String ,Fahrenheit:, . Position,[0.30.70.20.05],HorizontalAlignment,Left); edit_f=uicontrol(gcf,Style,Edit, . String,168.0, . Position,[0.60.70.10.05], . HorizontalAlignment,Right, . Callback,ct3_3); text_c1=uicontrol(gcf,Style,Text, . String ,Celcius:, . Position,[0.30.30.20.05], . HorizontalAlignment,Left); text_c2=uicontrol(gcf,Style,Text, . String,100.0, . Position,[0.60.30.10.05], . HorizontalAlignment,Left); Bâygitasxemcáclnhtrênhotđngnhth nào.Cáclnhsau: set(gcf,DefaultUicontrolUnit,Normalized) frame1=uicontrol(gcf,Style,Frame, . Position,[0.10.10.80.3]); frame2=uicontrol(gcf,Style,Frame, . Position,[0.10.60.80.3]); set(frame1,BackgroundColor,[0.50.50.5]); set(frame2,BackgroundColor,[0.50.50.5]); to haikhunghìnhchnhttrongcasFigurehinhànhvinnmàuxám. Haikhung(Frames)cótođcácgócditráilà(0.1,0.1)và(0.1,0.6),cùng chiucao0.3đnvvàbrng0.8đnv .Đnvđctínhbng%cakích cngoàicaFigure.Vytacóthdingiinhsau: Khungthnhtcógóctráiditiđimcótođ10%chiungangvà 10%chiu caocakhungngoàiFigure. 43 Khungth2cógóctráiphíaditiđimcótođngvi10%chiu ngangvà60%chiucaocakhungngoìaFigure. Chaikhungcóchiucaobng30%chiucaovàbngangbng 80% bngangcakhungngoàiFigure. 2.Dùnglnheditvàtextđnhpxutkítvàsliu:Trênđâytađãdùng lnhuicontrolđtovàxácđnhvtríhaikhunghình.Đonlnhsaus dng uicontrolđvitchuikít“Fahrenheit”lênkhungbêntrên: text_f=uicontrol(gcf,Style,Text,String,Fahrenheit:, . Position,[0.30.70.20.05],HorizontalAlignment,Left); Chui kí t “Fahrenhaeit”đcđt vàođúng v trí dn trái c a ô có Position ghi trongđon chng trình trên.Đon lnh saudùngEditđvit chuikít “68.0”vào vtríbêncnhca“Fahrenheit”.Chuikítcóvtrí dnphitrongô(PositionBox). edit_f =uicontrol(gcf,Style,Edit, . String,168.0, . Position,[0.60.70.10.05], . HorizontalAlignment,Right, . Callback,ct3_3); Dosdngedit,chuikít“68.0”làchuicóthvitliđctrcti ptrên GUI.Saukhinhnnúttrên,giátrmivitliđctipnhnvàMATLAB sgilnhvittrongphncallbacct3_3. Cuicùngtacònphidùnguicontrolđtotachui text,hinthchui “Celcius”và“20.0”trongkhungbêndi. text_c1=uicontrol(gcf,Style,Text,String,Celcius:, . Position,[0.30.30.20.05],HorizontalAlignment,Left); text_c2=uicontrol(gcf,Style,Text,String,20.0,Position, . [0.60.30.1 0.05],HorizontalAlignment,Left); 3.TđngcpnhtgiátrlênGUI:Đhoàn thinvídGUI ta thchin chngtrìnhvinhimvtínhquyđitđKsangđCvàtđngđinkt quvàocácôbêncnhchuiCelcius.Đonmãsauphcvmcđíchcallback (hoàntrgiátr)đcluvàofilect3_3.mvàcónidungnhsau: f=get(edit_f,String); f=str2num(f); c= (f32)*5/9; c=num2str(c); 44 set(text_c2,String,c); Đonmãtrênnhngiátrdolnhuicontrol“edit”đcvàodidngchui (string)vàsauđó: binđitdngstringsangdngs tínhquyđitnhitđfahrenheitsangnhit đcelcius binđitssangstring xutktqudidngstringraGUInhtext_c2 §3.NHPSLIUTTHANHTRT Ngoài cách nhp s liu t bàn phím, ta có th nhp s liu t thanh trt.Tamuntoramtgiaodinnhsau: Tronggiaodinnày,contrtslàmthayđigiátrnhitđđuavàovànhit đquyđitính theođCcũng sthayđitngng.Cáclnhtoragiao dinnày(lutrongfilect3_2.m) là: set(gcf,DefaultUicontrolUnit,Normalized) frame_1=uicontrol(gcf,Style,Frame,Position,[0.10.10.80.3]); frame_2=uicontrol(gcf,Style,Frame,Position,[0.10.60.80.3]); set(frame_1,BackgroundColor,[0.50.50.5]); set(frame_2,BackgroundColor,[0.50.50.5]); text_f=uicontrol(gcf,Style,Text,String, Fahrenheit:,Position, . [0.30.70.20.05],HorizontalAlignment,Left); 45 edit_f=uicontrol(gcf,Style,Edit, . String,168.0.,,, Position,[0.60.70.10.05], . HorizontalAlignment,Right, . Callback,ct3_3); text_c1=uicontrol(gcf,Style,Text, . String,Celcius:, . Position,[0.30.30.20.05], . HorizontalAlignment,Left); text_c2=uicontrol(gcf,Style,Text, . String,100.0, . Position,[0.60.30.10.05], . HorizontalAlignment,Left); slider_f=uicontrol(gcf,Style,Slider, . Min,32.0,Max,212.0, . Value,68.0, . Position,[0.60.80.20.05], . Callback,ct3_4;ct3_3 ); Đtothanhtrttadùnglnh: slider_f=uicontrol(gcf,Style,Slider,Min,32.0,Max,212.0, . Value,68.0,Position,[0.60.80.20.05], . Callback,ct3_4;ct3_3); Nh vy Callback có th gi mt chui các lnh MATLAB, phân cách nhau bngduchmthanhayduphy.Chuicallbackgict3_4.m: f=get(slider_f,Value); f=num2str(f); set(edit_f,String,f,CallBack,ct3_5;ct3_3); vitácdngnhpnhitđgiti‘Value’c aslider_fvàovtríbêncnhô chachui“Fahrenheit”.SauđóCallbackgitipct3_3.mđtínhquyđigiá trnhitđvàgánvàoôcnhchui“Celcius”.Filect3_5.mnhsau: f=get(edit_f,String); f=str2num(f); set(slider_f,Value,f); cónhimvcpnhtgiátrgiti‘Value’caslider_fđrisauđóct3_3.m làmntphnviccònli:tínhđinhitđvàgánvàovtrícnhôchachu i “Celcius”. 46 §4.CHNLAKHIXUTSLIU 1.Kháinimchung:Ngoàikhnăngxutdliucđnhtheokiustringhay kius,tacóthxutdliutheomtdanhmc nàođó.Đminhho,tato filect3_6.mnhsau: f=input(Nhapnhietdo:); r=f+459.7; c=(f32)*5/9; k=c+273.15; choice=input([Nhap1choRankie,2choCelcius,3choKelvin: ]); ifchoice==1 fprintf(1,Nhietdo(doR)la:%g\n,r); elseifchoice==2 fprintf(2,Nhietdo(doC)la:%g\n,c); elseifchoice==3 fprintf(2,Nhietdo(doC)la:%g\n,c); end Tcaslnh, nhplnhct3_6thìMATLABshinhitđvàđíchquyđi rihinth ktqu.Tuy nhiêncông cGUI caMATLABcho phépta thc hinviclachnthunlih n.Tacóthchnmttrong4phngxutd liusauđây: dùngpopupmenu dùnglistbox dùngradiobutton dùngcheckbox 2.Dùngpopupmenu:Tatoragiaodinnhsau: 47 Cáclnhthchincôngvictrên(lutrongfilect3_7.m)là: set(gcf,DefaultUicontrolUnit,Normalized) frame_1=uicontrol(gcf,Style,Frame, . Position,[0.10.10.80.3]); frame_2=uicontrol(gcf,Style,Frame, . Position,[0.10.60.80.3]); set(frame_1, BackgroundColor,[0.50.50.5]); set(frame_2,BackgroundColor,[0.50.50.5]); text_f=uicontrol(gcf,Style,Text, . String,Fahrenheit:, . Position,[0.30.70.20.05], . HorizontalAlignment,Left); edit_f=uicontrol(gcf,Style,Edit, . String, .168.0, . Position,[0.60.70.10.05 ], . HorizontalAlignment,Right, . Callback,ct3_3); popup_c=uicontrol(gcf, . Style,Popupmenu, . String,Rankine|Celcius|Kelvin, . Value,2, . Position,[0.30.30.20.05], . Callback,ct3_8;ct3_10); text_c2=uicontrol(gcf,Style,Text, . String,100.0, . Position,[0.6 0.30.10.05], . HorizontalAlignment,Left); slider_f=uicontrol(gcf,Style,Slider, . Min,32.0,Max,212.0, . Value,68.0, . Position,[0.60.80.20.05], . Callback,ct3_4;ct3_10); KhikíchchutvàoPopupmenu,cóbakhnăngchn lasxuthin.Tip tcnháychutvàomttrong3khnăngđó,Popupmenubinmtchcònli đn v đc chn. Khi dùng chut kéo thanh trtframe phía trên, ta có đcgiátrquyđisangđnvđcchnhinthphíadi.Trongđon mãtrên,giátr‘Value’đtsnlà2.KhiCallbackgict3_8.m: 48 choice=get(popup_c,’Value’); thì giá tr ca bin choiceđcđa ti ‘Value’. Sauđó Callback gi tip ct3_10.mđxemktqugitrongchoice.Filect3_10.mnhsau: f=get(edit_f,String); f=str2num(f); r=f+ 459.7; c=(f32)*5/9; k=c+273.15; choice=input([Nhap1choRankie,2choCelcius,3choKelvin:]); ifchoice==1 t=r; elseifchoice==2 t=c; elseifchoice==3 t=k end t=num2str(t); set(text_c2,String,t); Bngcáchthay‘Popupmenu’bng‘Radiobutton’uicontroltacóphng ánradiobutton.Giaodinscódng: Cáclnhthchincôngvicnày(lutrongfilect3_11.m)là: set(gcf,DefaultUicontrolUnit,Normalized) frame_1=uicontrol(gcf,Style,Frame,Position,[0.10.10.80.3]); 49 frame_2=uicontrol(gcf,Style,Frame,Position,[0.10.60.80.3]); set(frame_1,BackgroundColor,[0.50.50.5]); set(frame_2,BackgroundColor,[0.50.50.5]); text_f=uicontrol(gcf,Style,Text,String,Fahrenheit:,Position, . [0.30.70.20.05],HorizontalAlignment,Left); edit_f=uicontrol(gcf,Style ,Edit,String,168.0,Position, . [0.60.70.10.05],HorizontalAlignment, . Right,Callback,ct3_6); strings=[Rankine;Celcius;Kelvine]; show=[0;1;0]; ys=[3;2;1]*0.075+0.075; fori=1:3 radio_c(i)=uicontrol(gcf, . Style,Radiobutton, . String,strings(i), . Value,show(i), . Position,[0.3ys(i)0.20.05], . Callback,ct3_12;ct3_10); end text_c2=uicontrol(gcf,Style,Text,String,100.0,Position, . [0.60.30.10.05],HorizontalAlignment,Left); slider_f=uicontrol(gcf, Style,Slider,Min,32.0,Max,212.0, . Value,68.0,Position,[0.60.80.20.05], . Callback,ct3_4;ct3_10); Filect3_12.m: fori=1:3 ifgcbo==radio_c(i) choice=i; set(radio_c(i),Value,1); elseif set(radio_c(i),Value,0); end; end; Đon scripttrênlàmtvònglp,sosánhs(handle)Callbackthuđc(giátr dohàmgcbotrv)vihandlecaminút.Nútnàocóstrùngsđcđóng (turnon,‘Value’=1)vànútnàokhácss bngt(turnoff,’Value’=0).Cui cùngCallbackgict3_10.mđthchinvictínhquyđiđcchnvàhin 50 thktqu.Đimkhácduynhtlàkhichn,Popupmenuchchamtphn tthìradiobuttoncóthđngthichanhiuphnt. Cuicùngtaxétphngándùnglistbox.Giaodi ncntonhsau: Cácmãtoragiaodintrên(lutrongfilect3_13.m)là: set(gcf,DefaultUicontrolUnit,Normalized) frame_1=uicontrol(gcf,Style,Frame,Position,[0.10.10.80.3]); frame_2=uicontrol(gcf,Style,Frame,Position,[0.10.60.80.3]); set(frame_1,BackgroundColor,[0.50.50.5]); set(frame_2,BackgroundColor,[0.50.50.5]); text_f=uicontrol(gcf,Style,Text,String,Fahrenheit:,Position, . [0.30.70.20.05],HorizontalAlignment,Left); edit_f=uicontrol(gcf,Style,Edit,String,168.0,Position, . [0.60.70.10.05],HorizontalAlignment, . Right,Callback ,ct3_3); listbox_c=uicontrol(gcf, . Style,Listbox, . String,Rankine|Celcius|Kelvin, . Value,2, . Position,[0.30.30.20.05], . Callback,ct3_14;ct3_10); text_c2=uicontrol(gcf,Style,Text,String,100.0,Position, . 51 [...]...[0.6 0 .3 0.1 0.05], HorizontalAlignment , Left ); 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 , ct3_4; ct3_10 ); §5 CÔNG C HO 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 (Graphics User... file *.fig dùng l u giao di n v a t o và file *.m ch a các mã l nh c n th c hi n Vi c cu i cùng là vi t các mã l n vào file *.m Trong quá trình thi t k ta có th ch y th xem sau m i b c thi t k ã t yêu c u ch a b ng cách b m vào ô ch y th 2 M t s ví d t o GUI: a m s l n b m chu t: Ta thi t k m t giao di n nh sau: 52 Ta mu n là khi b m chu t, s l n b m s c m và ghi l i Tr c h t ta g i guide và có c m t... i tên là ct3_17.fig và ct3_17.m Nhi m v ti p theo là ghi các l nh c n thi t vào file ct3_17.m File này ã c MATLAB t ng t o ra Ta ph i thêm vào ó các mã l nh khi b m chu t thì s l n b m c th hi n trên ô Edit Text Ta s ghi các mã l nh này vào ph n: function varargout = pushbuttonmot_Callback(h, eventdata, handles, varargin) do l nh c n c th c hi n khi g i pushbutton N i dung c a ct3_17.m l : function... pushbutton N i dung c a ct3_17.m l : function varargout = Ct3_17(varargin) if nargin = = 0 fig = openfig(mfilename, reuse ); set(fig, Color ,get(0, defaultUicontrolBackgroundColor )); handles = guihandles(fig); guidata(fig, handles); if nargout > 0 53 varargout{1} = fig; end elseif ischar(varargin{1}) try [varargout{1:nargout}] = feval(varargin {:} ); catch disp(lasterr); end end function varargout = pushbuttonmot_Callback(h,... dem = 0; end dem = dem + 1; str = sprintf( So lan bam chuot: %d ,dem); set(handles.editmot, String ,str); Trong ph n này, ng n g i, ta b b t các dòng gi i thích và các dòng l nh không dùng n Bây gi ta ch y ch ng trình và nó s c p nh t s l n b m chu t b Chuy n i t Fahrenheit sang Celcius: Ta thi t k m t GUI chuy n i nhi t Giao di n có d ng nh sau: 54 ... có c m t layout r ng Vào Property Inspector (ô so n th o thu c tính) và ghi vào Name chu i ct3_17 và ch p nh n thu c tích Tag m c nh c a nó là figure1; dùng Font ch m c nh, c ch 12, bold Ta dùng ô Edit Text ghi l i s l n b m Ta vào Property Inspector r i ch n String Ta nh p vào ô này chu i So lan bam chuot: 0 Ta ghi vào ô Tag chu i editmot và c ng dùng Font ch m c nh, c ch 12 và bold Ti p theo kéo... ho Khi nh p l nh guide ta g i trình ho (Graphics User Interface Development Environment) so n th o layout K t qu u tiên là ta có m t layout r ng nh sau: Alignment So n th o thu c tính Ch y th So n menu Vùng thi t k Các ph n t Vi c u tiên là ta thi t k giao di n mong mu n Ta s dùng chu t kéo các ph n t c n dùng t bên trái và th vào layout r ng bên ph i Ta có th d ch chuy n các ph n t này các v trí mong . CHNG 3: GIAO DINĐHO GUI §1.KHÁINIMCHUNG Đ tin dng ta có th to nên giao dinđho (GUI Graphic User Interface)giangidùngvàMATLAB.Trong giao dinnàytacóthxutd. Value,68.0,Position,[0.60.80.20.05], . Callback,ct3_4;ct3_10); Filect3_12.m: fori=1 :3 ifgcbo==radio_c(i) choice=i; set(radio_c(i),Value,1);