new第6講MATLAB圖形用戶界面設(shè)計.ppt
《new第6講MATLAB圖形用戶界面設(shè)計.ppt》由會員分享,可在線閱讀,更多相關(guān)《new第6講MATLAB圖形用戶界面設(shè)計.ppt(49頁珍藏版)》請在裝配圖網(wǎng)上搜索。
第5章圖形用戶界面編程,圖形用戶界面,所謂用戶界面就是用戶與計算機(jī)交互通信聯(lián)系的平臺。圖形用戶界面是指包含圖形對象的用戶界面,MATLAB包含兩類基本的圖形對象:控件對象和菜單對象。MATLAB提供了“布局編輯器”和“菜單編輯器”等工具設(shè)計圖形用戶界面。,5.1布局編輯器,MATLAB窗口的File菜單下選New下的GUI,或在MATLAB命令窗口輸入guide。,,圖形對象,,工具條:排列、菜單編輯、M文件編輯器、屬性觀察器、對象瀏覽器和圖形激活鈕。,,布局區(qū)域,GUI制作:需求分析,要點:1)確定需要實現(xiàn)哪些功能;2)確定數(shù)據(jù)輸入/輸出方式;3)確定所需的窗口圖形元素;4)繪制GUI草圖;5)征求用戶或他人的意見,并進(jìn)行修改。,GUI制作:繪制并測試GUI,要點:1)在計算機(jī)上實現(xiàn)需求分析繪制的草圖,并依據(jù)實際情況進(jìn)行調(diào)整;2)從用戶使用的角度對GUI進(jìn)行調(diào)試。注:在完成設(shè)計與測試之前,不要編碼,因為此時編寫的代碼可能會因設(shè)計的更改而失去意義。在GUI測試穩(wěn)定后編寫并測試代碼。,GUI設(shè)計原則,簡單性簡潔、直接、清晰地體現(xiàn)出界面的功能和特征。風(fēng)格一致性例如:圖形窗口在左,圖形控件在右等。易理解性盡量使用人們熟悉的標(biāo)志和符號,界面中的動作必須做到及時、連續(xù)、可逆,對連續(xù)時間長的運算要給出等待時間提示,并允許用戶中斷等。,5.2控件對象,選擇命令鈕單選鈕文本框滾動條列表框坐標(biāo)軸,,,,,,,,開關(guān)鈕復(fù)選框標(biāo)簽框架彈出式菜單,,,,,,控件對象屬性:外觀及風(fēng)格控制,BackgrandColor:設(shè)置控件的背景色,可以是RGB顏色值,如[110],也可以是短名顏色值,如‘y’,還可以是長名顏色值,如‘yellow’;Cdata:設(shè)置顯示在控件上圖象的顏色值;1行3列。(效果不理想)ForegroundColor:設(shè)置控件上顯示文本的顏色;SelectHighlight:用于確定空間被選中時是否顯示被選中的狀態(tài)(取值:on、off);String:用于設(shè)置控件上顯示的文本串;Visible:設(shè)置控件的可見狀態(tài)。,控件對象屬性:基本信息屬性,Enable:可用狀態(tài)on;暫停不用狀態(tài)inactive;不可用狀態(tài):off;Parent:控件對象的父對象句柄所在圖形窗口對象句柄;Selected:用于確定控件是否被選中;Sliderstep:用于設(shè)置滾動條每次移動的步長;Style:用于決定所創(chuàng)建控件的類型;Tag:相當(dāng)于控件對象的名稱,在程序設(shè)計時可用來指定控件;TooltipString:設(shè)置簡單提示信息;UserData:保存與控件對象有關(guān)的信息或數(shù)據(jù),可通過set和get函數(shù)來調(diào)用這些信息。,控件對象屬性:字體控制屬性,FontAngle:用于確定字體的傾斜;FontName:設(shè)置字體的名稱;FontSize:設(shè)置字體的大??;FontUnits:確定字體大小的單位;FontWeight:定義字體的粗細(xì);HorizontalAlignment:定義字符對齊方式。,控件對象屬性:回調(diào)例程控制,ButtonDownFcn:定義當(dāng)鼠標(biāo)在控件對象上按下時執(zhí)行的回調(diào)例程,可以是字符串、MATLAB表達(dá)式或M文件的文件名;Callback:定義單擊控件時執(zhí)行的回調(diào)例程;CreateFcn:定義在控件對象創(chuàng)建階段執(zhí)行的回調(diào)例程;DeleteFcn:定義在控件對象刪除階段執(zhí)行的回調(diào)例程;BusyAction:決定回調(diào)例程的調(diào)用方式,取值有cancel與queue,與Interruptible聯(lián)合使用;Interruptible:決定回調(diào)例程的中斷調(diào)用模式,如為on則新的回調(diào)例程中斷當(dāng)前正在執(zhí)行的回調(diào)例程,如為off則由BusyAction決定調(diào)用模式;UIContextMenu:建立與上下文菜單(contextmenu)對象的聯(lián)系,其屬性的取值為菜單對象句柄。,控件對象屬性:當(dāng)前狀態(tài)信息屬性,ListboxTop:用于顯示在列表框最上頭的字符串的索引號,默認(rèn)值為1;是String屬性定義的字符串向量的某個元素的索引值。Value:決定空間的當(dāng)前值;對彈出式菜單控件pop_upmenus,該屬性為已選中的列表項的索引值。,控件對象屬性:當(dāng)前狀態(tài)信息屬性Max,Max:定義Value屬性允許的最大值。在不同的控件類型中,Max有不同的意義:復(fù)選框:選中時Value屬性的值為Max的值;文本框:Max-Min>1則可進(jìn)行多行輸入;列表框:Max-Min>1則可允許多個列表項選擇;單選鈕:選中時Value屬性的值為Max的值;滾動條:定義了滾動條變化范圍的最大值;開關(guān)鈕:選中時Value屬性的值為Max的值。,控件對象屬性:當(dāng)前狀態(tài)信息屬性Min,Min:定義了Value屬性允許的最小值。復(fù)選框:未選中時Value屬性的值為Min的值;單選鈕:未選中時Value屬性的值為Min的值;滾動條:定義了滾動條變化范圍的最小值;開關(guān)鈕:未選中時Value屬性的值為Min的值。,控件對象屬性的操作方式和步驟,命令方式:利用uicontrol建立控件對象時,定義控件屬性的屬性值;利用set設(shè)置、修改屬性的屬性值;利用get獲得屬性的屬性值。GUI方式:通過PropertyInspectorGUI設(shè)計工具設(shè)置控件對象的屬性值。程序中控件對象的一般操作步驟:1)獲取對象句柄;2)對對象屬性進(jìn)行操作。,MATLAB句柄圖形,句柄圖形:MATLAB每幅圖的每個組成部分是一個對象,每個對象有一個句柄與其相聯(lián)。MATLAB句柄圖體系如下:,圖形句柄,在MATLAB中,每個圖形對象都由一個數(shù)字來表識,稱為句柄,用來唯一確定圖形對象。計算機(jī)屏幕:根對象(Root),句柄為0;圖形窗口:句柄為整數(shù);其它:句柄為浮點值。,圖形對象句柄的獲取,每個對象在創(chuàng)建時可以返回該對象的句柄。例如:h=plot(0:.1:2*pi,sin(0:.1:2*pi));利用標(biāo)準(zhǔn)對象句柄獲取函數(shù)獲?。篻cf:獲取當(dāng)前圖形窗口的句柄;gca:獲取當(dāng)前坐標(biāo)軸的句柄;gco:獲取當(dāng)前圖形的當(dāng)前對象的句柄;gcbf/gcba/gcbo:獲取回調(diào)例程圖形窗口/坐標(biāo)軸/當(dāng)前對象的句柄。,圖形對象句柄的獲取findobj,h=findobj(‘Propertyname’,propertyValue,…):獲得指定屬性Propertyname的屬性值為propertyValue對應(yīng)對象的句柄。h=findobj(objHandle,‘Propertyname’,propertyValue,…):同上,但將查找范圍限制在objHandle指定的對象及其子對象中。h=findobj(objHandle,’flat’,‘Propertyname’,propertyValue,…):同上,但將查找范圍不包括子對象。h=findobj:返回一個列向量,是根對象及其所有子對象的句柄值。,圖形對象句柄的獲取舉例,%---Executesonbuttonpressinpushbutton1.functionpushbutton1_Callback(hObject,eventdata,handles)h=findobj(Tag,axes1);x=-pi:0.1:pi;y=sin(x);plot(x,y,Parent,h);,%---Executesonbuttonpressinpushbutton2.functionpushbutton2_Callback(hObject,eventdata,handles)h=findobj(Tag,axes2);x=-pi:0.1:pi;y=cos(x);plot(x,y,Parent,h);,對象及屬性的操作:刪除和拷貝,delete(handle):刪除句柄handle對應(yīng)對象及其子對象;c=copyobj(h,p):復(fù)制對象句柄,c為新得到的句柄。如果h和p均為向量,則將h對應(yīng)的句柄分別作為p各對應(yīng)對象的子對象的句柄;如果h為向量,p為標(biāo)量,則將h對應(yīng)的句柄作為p對應(yīng)對象的子對象的句柄;如果h為標(biāo)量,p為向量,則將h對應(yīng)的句柄分別作為p對應(yīng)對象的子對象的句柄。,對象及屬性的操作copyobj舉例,mesh(peaks(30));text(30,20,2,\leftarrowpeak);h=findobj(String,\leftarrowpeak);figuremesh(peaks(20));ha=copyobj(h,gca);,對象及屬性的操作:創(chuàng)建、設(shè)置和獲取,h=uicontrol(parent,’PropertyName’,propertyValue,…)缺省parent表示在當(dāng)前圖形窗口創(chuàng)建控件對象。set(handle,’PropertyName’,propertyValue,…)用來設(shè)置句柄為handle的控件對象的屬性值。get(handle,’PropertyName’)返回句柄為handle的對象中名為PropertyName的屬性的屬性值。,對象及屬性的操作舉例,x=0:.1:2*pi;y=sin(x);h_sin=plot(x,y,*);lineWidth=get(h_sin,LineWidth);set(h_sin,Color,[10.50],LineWidth,lineWidth+4);hpop=uicontrol(Style,popup,String,Black|Green|Blue|Red,...Position,[340190100150],Callback,setmap,...Tag,popup);,setmap.m文件中的內(nèi)容:hp=findobj(Tag,popup);val=get(hp,Value);ifval==1set(gca,Color,[0,0,0]);elseifval==2set(gca,Color,[010]);elseifval==3set(gca,Color,[001]);elseifval==4set(gca,Color,[100]);end,5.3菜單對象和上下文菜單,在MATLAB中有兩類菜單:下拉式菜單uimenu和上下文菜單uicontextmenu。下拉式菜單(菜單對象)的位置是固定的。上下文菜單的位置是不固定的,且總與某個圖形對象相聯(lián)系,通過鼠標(biāo)右鍵激活,同時下拉式菜單可為其中的菜單項。,菜單對象的創(chuàng)建,hm=uimenu(h,’PropertyName’,value,…)以h為父對象的句柄創(chuàng)建一個菜單對象,并返回該菜單的句柄。例如:,h0=figure(MenuBar,none,Toolbar,none,Name,DrawGraph);h1=uimenu(h0,Label,,‘‘Checked’’,,上下文菜單創(chuàng)建,h=uicontextmenu(‘PropertyName’,propertyValue,…)一般步驟:1)利用uincontextmenu創(chuàng)建上下文菜單對象;2)利用uimenu制作菜單項;3)利用set將上下文菜單與具體的圖形對象聯(lián)系起來。,上下文菜單創(chuàng)建舉例,cmenu=uicontextmenu;hline=plot(1:10,UIContextMenu,cmenu);item1=uimenu(cmenu,Label,dashed,...Callback,set(hline,LineStyle,--));item2=uimenu(cmenu,Label,dotted,...Callback,set(hline,LineStyle,:));item1=uimenu(cmenu,Label,Solid,...Callback,set(hline,LineStyle,-));,利用菜單編輯器制作菜單,菜單屬性,在菜單編輯器的右邊有少量有關(guān)菜單屬性值的設(shè)置。Checked:對選中的菜單打標(biāo)記(對頂層菜單無用);Label:設(shè)置菜單標(biāo)題;Separator:用于在菜單上設(shè)置分隔條;Visible:設(shè)置菜單的可見狀態(tài);Accelerator:用于設(shè)置菜單加速鍵;Callback:定義單擊菜單對象時執(zhí)行的回調(diào)例程;Tag:標(biāo)記菜單項的名稱,便于在程序設(shè)計時通過該名稱指定菜單項。,5.4對話框,在GUI程序設(shè)計中,對話框是最重要的顯示信息和取得用戶數(shù)據(jù)的用戶界面對象。MATLAB的對話框分為兩類:公共對話框和一般對話框。公共對話框:文件打開對話框、文件保存對話框、顏色設(shè)置對話框、字體設(shè)置對話框、打印頁面對話框、打印預(yù)覽對話框和打印對話框。一般對話框:幫助對話框、出錯信息對話框、信息提示對話框等。,文件打開對話框,[fname,pname]=uigetfile(‘FilterSpec’,’DialogTitle’,x,y)獲取待打開文件的文件名fname及路徑信息pname。FilterSpec指定文件類型;DialogTitle指定對話框標(biāo)題名;x,y指定對話框位置信息。uigetfile并未打開有關(guān)文件。MATLAB提供了基于C語言實現(xiàn)的低級文件I/O函數(shù)。,>>[fn,pn]=uigetfile(*.m,OpenMFile,10,10);>>fnfn=sample1.m>>pnpn=C:\MATLAB6p5\work\,打開、關(guān)閉文件,[fid,errormessage]=fopen(filename,permission);使用permission指定的模式打開filename指定的文件,成功時返回文件標(biāo)識,否則返回系統(tǒng)錯誤信息errormessage.permission的取值及含義:‘r’:只讀模式;‘w’:寫模式(含創(chuàng)建);’a’:添加;‘r+’:讀寫;‘w+’:讀寫(含創(chuàng)建);‘a(chǎn)+’:添加(含創(chuàng)建)。status=fclose(fid):關(guān)閉fid指定的文件,操作成功時返回0,否則返回1。,無格式輸入/輸出,[a,count]=fread(fid,size,precision,skip):從指定文件fid中讀取size個單位長度為precision的數(shù)據(jù)元素至a中,skip表示每次讀后跳過的字節(jié)數(shù)。count表示實際讀入的數(shù)據(jù)個數(shù)。size取值含義:標(biāo)量n(讀取n個元素);inf(讀到文件結(jié)尾);[m,n](讀取m*n個元素)。precision:‘uchar’(8位無符號字符—缺省值);‘schar’(8位帶符號字符);‘int8’(8位帶符號整數(shù));‘uint8’(8位無符號整數(shù));‘single’(32位浮點數(shù));‘double’(64位浮點數(shù))。count=fwrite(fid,a,precision,skip):將a中數(shù)據(jù)轉(zhuǎn)換成precision指定的數(shù)據(jù)元素寫入fid指定的文件中,count為成功寫入的元素數(shù)目。,格式化輸入/輸出,count=fprintf(fid,format,a,…):將a中數(shù)據(jù)用format格式化后寫入文件fid中,count為寫入的字節(jié)數(shù)。fid缺省表示向顯示屏輸出。例如:x=0:.2:2;y=[x;2*exp(x)];fid=fopen(data.txt,w);fprintf(fid,%6.2f%12.8f\n,y);fclose(fid);[a,count]=fscanf(fid,format,size):從fid指定文件中讀取size指定的數(shù)據(jù),并根據(jù)format指定的格式對其轉(zhuǎn)換后返回a,count為讀取的元素數(shù)目。,按行從文件讀數(shù)據(jù),line=fgetl(fid):從文件fid中讀1行數(shù)據(jù)至line,返回的行不包括換行符。遇到文件結(jié)尾則返回-1。line=fgets(fid):從文件fid中讀1行數(shù)據(jù)至line,返回的行包括換行符。遇到文件結(jié)尾則返回-1。,文件測試,eofstat=feof(fid):文件結(jié)尾返回-1,否則返回0。frewind(fid):將文件位置指針反繞到文件開頭。status=fseek(fid,offset,origin):將文件的位置指針定位到origin偏移offset指定的位置。Origin的取值為‘bof’或-1文件開始‘cof’或0文件當(dāng)前位置‘eof’或1文件結(jié)束position=ftell(fid):返回位置指針指向的位置,失敗時返回-1。,文件保存對話框,[fname,pname]=uinputfile(‘Initfile’,’DialogTitle’,x,y):Initfile為指定待保存文件類型,DialogTitle為對話框標(biāo)題,x和y為對話框位置。例如:>>uiputfile(*.m,Save)ans=kk,顏色設(shè)置對話框,c=uisetcolor(h_or_c,’DialogTitle’):h_or_c為初始顏色,可以是一個1X3的RGB向量,也可以是一個圖形對象的句柄(該圖形對象必有一個顏色屬性)。,>>c=uisetcolor([101],SelectColor)c=0.251000.2510,,,字體設(shè)置對話框,s=uisetfont(h_or_s,’DialogTitle’):h_or_s為初始字體屬性,可以是一個對象的句柄,也可以是一個字體屬性結(jié)構(gòu);s為字體屬性結(jié)構(gòu),包括(FontName,FontUnits,FontSize,FontWeight,FontAngle等域)。,Text1=uicontrol(style,text,string,XxYyZz);Text2=uicontrol(style,text,string,AxBbCc,...position,[200206020]);s=uisetfont(Text1,UpdateFont);ifisstruct(s)%Checkforcancelset(Text2,s);end,幫助對話框,h=helpdlg(‘HelpString’,’dlgname’):HelpString為幫助信息;dlgname為對話框標(biāo)題。例如:,>>helpdlg(Thisisadialogue!,Help),在線幫助窗口helpwin(補(bǔ)),>>str={Topic1,Helpstringfortopic1‘;Topic2Helpstringfortopic2};>>helpwin(str,Topic2,MyTitle),信息提示對話框,h=msgbox(message,title,’icon’):icon的取值為:‘none’,’error’,’help’和‘custom’,默認(rèn)為‘none’。,Data=1:64;Data=(Data*Data)/64;h=msgbox(String,Title,custom,Data,hsv(64));,5.5GUI編程,設(shè)計一個如下所示的GUI,當(dāng)單擊“繪圖”按鈕時,將在坐標(biāo)軸上繪制選擇的圖形。,Figure的Name屬性值為‘GUI例子程序’,坐標(biāo)軸的Tag屬性值為‘a(chǎn)xes1’,,,標(biāo)簽的String屬性的值為‘圖形選擇’,,單選鈕的string屬性值為‘正弦曲線’,Tag屬性值為sin,單選鈕的string屬性值為‘余弦曲線’,Tag屬性值為cos,Value屬性值為1.0,,,命令鈕的string屬性值為‘繪圖’,Tag屬性值為draw,,保存時文件名為fgui,fgui.m程序說明:gui_State,%Begininitializationcode-DONOTEDITgui_Singleton=1;gui_State=struct(gui_Name,mfilename,...gui_Singleton,gui_Singleton,...gui_OpeningFcn,@fgui_OpeningFcn,...gui_OutputFcn,@fgui_OutputFcn,...gui_LayoutFcn,[],...gui_Callback,[]);ifnarginend,ifnargout[varargout{1:nargout}]=gui_mainfcn(gui_State,varargin{:});elsegui_mainfcn(gui_State,varargin{:});end%Endinitializationcode-DONOTEDIT,gui_Singleton大于0表示只有一個實例化的圖形窗口存在;gui_Name圖形窗口對應(yīng)文件名;,gui_OpeningFcn窗口創(chuàng)建前執(zhí)行的函數(shù);gui_OutputFcn輸出時執(zhí)行的函數(shù);gui_Callback確定控件的回調(diào)函數(shù);gui_mainfcn調(diào)用分派函數(shù)。,fgui.m程序說明:fgui_OpeningFcn,%---Executesjustbeforefguiismadevisible.functionfgui_OpeningFcn(hObject,eventdata,handles,varargin)%Thisfunctionhasnooutputargs,seeOutputFcn.%hObjecthandletofigure%eventdatareserved-tobedefinedinafutureversionofMATLAB%handlesstructurewithhandlesanduserdata(seeGUIDATA)%varargincommandlineargumentstofgui(seeVARARGIN)%Choosedefaultcommandlineoutputforfguihandles.output=hObject;%Updatehandlesstructureguidata(hObject,handles);%UIWAITmakesfguiwaitforuserresponse(seeUIRESUME)%uiwait(handles.figure1);,guidata:存儲或檢索應(yīng)用數(shù)據(jù)。,fgui.m程序說明:fgui_OutputFcn,%---Outputsfromthisfunctionarereturnedtothecommandline.functionvarargout=fgui_OutputFcn(hObject,eventdata,handles)%varargoutcellarrayforreturningoutputargs(seeVARARGOUT);%hObjecthandletofigure%eventdatareserved-tobedefinedinafutureversionofMATLAB%handlesstructurewithhandlesanduserdata(seeGUIDATA)%Getdefaultcommandlineoutputfromhandlesstructurevarargout{1}=handles.output;,fgui.m程序說明:draw_Callback,%---Executesonbuttonpressindraw.functiondraw_Callback(hObject,eventdata,handles)%hObjecthandletodraw(seeGCBO)%eventdatareserved-tobedefinedinafutureversionofMATLAB%handlesstructurewithhandlesanduserdata(seeGUIDATA)x=-pi:.1:pi;ifget(handles.sin,Value)>0plot(x,sin(x),Parent,handles.axes1);elseifget(handles.cos,Value)>0plot(x,cos(x),Parent,handles.axes1);end,,用戶輸入程序,fgui.m程序說明:sin_Callback,%---Executesonbuttonpressinsin.functionsin_Callback(hObject,eventdata,handles)%hObjecthandletosin(seeGCBO)%eventdatareserved-tobedefinedinafutureversionofMATLAB%handlesstructurewithhandlesanduserdata(seeGUIDATA)%Hint:get(hObject,Value)returnstogglestateofsinset(handles.cos,‘Value’,get(handles.cos,‘Min’));%設(shè)置cos單選鈕為補(bǔ)選中狀態(tài),Cos_Callback與此類似,- 1.請仔細(xì)閱讀文檔,確保文檔完整性,對于不預(yù)覽、不比對內(nèi)容而直接下載帶來的問題本站不予受理。
- 2.下載的文檔,不會出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請點此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
9.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁顯示word圖標(biāo),表示該PPT已包含配套word講稿。雙擊word圖標(biāo)可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計者僅對作品中獨創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- new MATLAB 圖形 用戶 界面設(shè)計
鏈接地址:http://m.jqnhouse.com/p-3386563.html