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