




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第八章 MATLAB的GUI 程序設(shè)計Chapter8:DesignofMATLABofprogramGUI(GraphicalUserInterfaces):由各種圖形對象組成的用戶界各種圖形對象來實現(xiàn)的?;緢D形對象分為控件對象和用戶界面菜單對象,簡稱控件和菜單。一.控件對象及屬性(Objectanditsattributesofcontroller))GUI控件對象類型(Themodeofcontrollerobject)控件對象是事件響應(yīng)的圖形界面對象。當某一事件發(fā)生時,應(yīng)用程序會做出響應(yīng)并執(zhí)行某些預(yù)定的功能子程序(Callback).控件對象及其功能:(表7—1)控件對象的描述(Descriptionofcontrollerobject)MATLAB擊這些控件時會產(chǎn)生相應(yīng)的響應(yīng)。一種為靜態(tài)控件,是一種不產(chǎn)生響應(yīng)的控件,如文本框等。能及效果,既屬性。屬性由兩部分組成:屬性名和屬性值,它們必須是成對出現(xiàn)的。按鈕(PushButtons):執(zhí)行某種預(yù)定的功能或操作;開關(guān)按鈕(ToggleButton):產(chǎn)生一個動作并指示一個二(開或關(guān)回調(diào)函數(shù)callback中的內(nèi)容;單選框(Radio單個的單選框用來在兩種狀態(tài)之間切換,多個單選框組成一個單選框組時,用戶只能在一組狀態(tài)中選擇單一的狀態(tài),或稱為單選項;復(fù)選框(Check一組狀態(tài)中作組合式的選擇,或稱為多選項;文本編輯器(Editable用來使用鍵盤輸入字符串操作;靜態(tài)文本框(StaticTexts):僅僅用于顯示單行的說明文字;滾動條(Slider):可輸入指定范圍的數(shù)量值;邊框(Frames):在圖形窗口圈出一塊區(qū)域;列表框(ListBoxes):在其中定義一系列可供選擇的字符串;彈出式菜單(PopupMenus)讓用戶從一列菜單項坐標軸(Axes):用于顯示圖形和圖象控件對象的屬性(Attributesofcontrollerobject)用戶可以在創(chuàng)建控件對象時,設(shè)定其屬性值,未指定時將使用系統(tǒng)缺省值。兩大類控件對象屬性:第一類是所有控件對象都具有的公共屬性,第二類是控件對象作為圖形對象所具有的屬性。A,控件對象的公共屬性Children取值為空矩陣,因為控件對象沒有自己的子對象Parent取值為某個圖形窗口對象的句柄,該句柄表明了控件對象所在的圖形窗口Tag取值為字符串,定義了控件的標識值,在任何程序中都可以通過這個標識值控制該控件對象Type取值為uicontrol,表明圖形對象的類型UserDate取值為空矩陣,用于保存與該控件對象相關(guān)的重要數(shù)據(jù)和信息VisiblenoB,控件對象的基本控制屬性BackgroundColor取值為顏色的預(yù)定義字符或RGB數(shù)值Callback取值為字符串,可以是某個M文件名或一小段MATLAB語句,當用戶激活某個控件對象時,應(yīng)用程序就運行該屬性定義的子程序。Enable取值為on(缺省值),inactive和offExtend取值為四元素矢量[00width,height],記錄控件對象標題字符的位置和尺寸ForegroundColor取值為顏色的預(yù)定義字符或RGB數(shù)值Max,Min取值都為數(shù)值String取值為字符串矩陣或數(shù)組,定義控件對象標題或選項內(nèi)容Stylepushbutton,radiobutton,checkbox,edit,slider,frame,popupmenu或listboxUnits取值可以是pixels,normalized,inches,centimeters或pointsValue取值可以是矢量,也可以是數(shù)值,其含義及解釋依賴于控件對象的類型C,控件對象的修飾控制屬性FontAnglenormal,italic,oblique,FontNameFontSize取值為數(shù)值,F(xiàn)ontWeight取值為points,normalized,inches,centimeters或pixelsHorizontalAligment取值為left,right,定義對齊方式D,控件對象的輔助屬性ListboxTop取值為數(shù)量值SliderStop取值為兩元素矢量[minstep,maxstep],slider控件Selected取值為on或offSlectionHoghlight取值為on或offE,Callback管理屬性BusyAction取值為cancel或queueButtDownFun取值為字符串,一般為某個M文件名或一小段MATLAB程序Creatfun取值為字符串,一般為某個M文件名或一小段MATLAB程序DeletFun取值為字符串,一般為某個M文件名或一小段MATLAB程序HandleVisibilityon,callbackInterruptible取值為onoff二.GUI開發(fā)環(huán)境(GUIDevelopmentEnvironment,GUIDE)MATLABGUI應(yīng)用程序,GUIM己的應(yīng)用程序。MATLAB的工具,包括:*布局編輯器(LayoutEdtor)在圖形窗口中加入及安排對象。布輯器中訪問,用guide命令可以啟動,或在啟動平臺窗口中選擇GUIDE來啟動布局編輯器。*幾何排列工具(Alignment調(diào)整各對象相互之間的幾何關(guān)系和位置*屬性編輯器(PropertyInspector) 查詢并設(shè)置屬性值*對象瀏覽器ObjectBrowser)用于MATLAB圖形用戶和標識,在控件上雙擊鼠標可以打開該控件的屬性編輯器。*菜單編輯器(MenuEditor) 建立窗口菜單條的菜單和任何構(gòu)成布局的彈出菜單MATLABGUIM文件的編程形式實現(xiàn)的,GUIMMATMATLAB6中MATLAB6將GUI的布局代碼存儲在FIGMM文件中不再包含GUI的布局代碼,在開發(fā)應(yīng)用程序時代碼量大大減少。布局編輯器(Layout用于從控件選擇板上選擇控件對象并GUIDEguideGUIDEfilename可打開一個已存在filename圖形用戶界面。將控件對象放置到布局區(qū)用鼠標選擇并放置控件到布局區(qū)內(nèi);移動控件到適當?shù)奈恢?;改變控件的大小;選中多個對象的方法;激活圖形窗口ToolsActivateFigure項或點擊工具條上的ActivareFigure按鈕,MFIG文件,如所建立的布局還沒有進行存儲,用戶界面開發(fā)環(huán)SaveAs對話框,按輸入的文件的名字,存儲一M文件和帶有.figFIG文件。運行GUI程序openfig,open或hgloadGUI程序。布局編輯器參數(shù)設(shè)置FilePreferences樹狀目錄中的GUIDE,既可以設(shè)置布局編輯器的參數(shù)。布局編輯器的彈出菜單在任一控件上按下鼠標右鍵,會彈出一個菜單,通過該菜單可以完成布局編輯器的大部分操作。幾何位置排列工具(Alignmenttool)用于調(diào)節(jié)各控件對象之間的相對位置。用屬性編輯器設(shè)置控件屬性(SetattributesofcontrollerPropertyInspector)在屬性編輯器中提供了所有可設(shè)置的屬性列表并顯示出當前的屬性。(1)(OpeningPropertyInspector):用ViewPropertyInspector菜單項;3.PropertyInspector菜單項。使用屬性編輯器(UsingPropertyInspector)布置控件定義文本框的屬性定義坐標系定義按鈕屬性定義復(fù)選框菜單編輯器(MenuEditor):包括菜單的設(shè)計和編輯,菜單編輯器有八個快捷鍵,可以利用它們?nèi)我馓砑踊騽h除菜單,可以設(shè)置菜單項的屬性,包括名稱(Label)、標識、選擇是否顯示分隔線(Separatorabovethisitem)、是否在菜單前加上選中標記(Itemischecked)、調(diào)用函數(shù)(Callback)。對象瀏覽器(ObjectBrowsers):用于瀏覽當前程序所使用的全部對象信息,可以在對象瀏覽器中選種一個或多個控件來打開該控件的屬性編輯器。三、GUI程序設(shè)計(GUIProgramdesign)包括圖形界面的設(shè)計和功能設(shè)計兩個方面例1:用于繪圖和圖形旋轉(zhuǎn)的GUI:1、 布置控件一個坐標系、個文本框、個復(fù)選框,個按鈕2、 定義文本框的屬性:String簡單設(shè)計示例,F(xiàn)ontName書,F(xiàn)ontSize--223、 定義坐標系:Visible—off,4、 定義按鈕屬性:String—繪圖,F(xiàn)ontName,ForegroundColor,ontSize,BackgroundColor,Callbacksurf(peaks(30))5、 定義復(fù)選框:String—rotate3D,Callback—rotate3d例2:設(shè)計一個簡單信號分析儀的程序,要求根據(jù)輸入的兩個頻x=sin(2πf1t)+sin(2πf2t)的值,并對函數(shù)進行快速傅立葉變換,最后分別繪制時域和頻域的曲線。設(shè)計圖形界面(GUIDesign)設(shè)計步驟:在布局編輯器中布置控件,使用幾何位置排列工具對控件的位置進行調(diào)整;設(shè)計控件的屬性;設(shè)置其他繪圖屬性。設(shè)置控件的標識(SettheTagofcontroller)控件的標識是對于各控件的識別,每個控件載創(chuàng)建時都會由開發(fā)環(huán)境自動產(chǎn)生一個標識,在程序設(shè)計中,維護的方便,軸的標識為:frequency_axes,用于顯示頻域圖形;的標識為:time_axes,用于顯示時域圖形。三個文本編輯框的標f1_input,f2_input,t_input,分別用于輸入兩個頻率和自變量時間的間隔.編寫代碼(Editcode)GUI圖形界面的功能,還是要通過一定的設(shè)計思路和計算方法,及繪圖等工作。一般方法為,內(nèi)容為:%(1)設(shè)置對象的初始值;%分別設(shè)置三個文本編輯框的初始值為:f1_input=20f2_input=50f3_input=0:0.001:0.5%(2)編寫代碼:%1)從GUI獲得擁護輸入的數(shù)據(jù),本例中輸入的三個數(shù)據(jù)%分別為頻率1、頻率2和時間間隔。f1=str2double(get(handles.f1_input,'String'));f2=str2double(get(handles.f2_input,'String'));t=eval(get(handles.t_input,'String'));%2)計算數(shù)據(jù),計算函數(shù)值,按指定點進行快速傅立葉變%換,并計算頻域的幅值和頻域分辨率。x=sin(2*pi*f1*t)+sin(2*pi*f2*t);y=fft(x,512);m=y.*conj(y)/512;f=1000*(0:256)/512;%3)在第一個坐標軸中繪制頻域曲線。axes(handles.frequency_axes)plot(f,m(1:257))set(handles.frequency_axes,'XminorTick','on')gridon%4)在第二個坐標軸中繪制時域曲線。axes(handles.time_axes) %選擇適當?shù)淖鴺溯Splot(t,x)set(handles.time_axes,'XminorTick','on')gridon運行程序(Runningprogram)例3:制作一個曲面光照效果的演示界面,如圖所示,三個彈出式菜單分別用于選擇曲面形式、色彩圖、光照模式和反射模式,三個滾動條用于確定光源的位置,一個按鈕用于退出演示。制作要點:建立一個靜態(tài)文本,用于顯示界面的標題:光照效果演示;建立坐標軸對象,用于顯示圖形;建立四個下拉菜單,分別用于選擇繪圖表面的形狀、色圖、光照模式和反射模式,每個下拉菜單的上方都有一個靜態(tài)文本用于說明菜單的作用;frameframe加一說明;建立一個按鈕用于退出演示;callback函數(shù)的內(nèi)容為:functionvarargout=pushbutton1_Callback(h,eventdata,handles,varargin)delete(handles.figure1)%function varargout = popupmenu1_Callback(h, eventdata, varargin)val=get(h,'value');switchvalcase1surf(peaks);case2sphere(30);case3membranecase4[x,y]=meshgrid(-4:.1:4);r=sqrt(x.^2+y.^2)+eps;z=sinc(r);surf(x,y,z)case5[x,y]=meshgrid([-1.5:.3:1.5],[-1:0.2:1]);z=sqrt(4-x.^2/9-y.^2/4);surf(x,y,z);case6t=0:pi/12:3*pi;r=abs(exp(-t/4).*sin(t));[x,y,z]=cylinder(r,30);surf(x,y,z);endshadinginterplight('Position',[-3-2axisoff%function varargout = radiobutton1_Callback(h, varargin)set(h,'value',1)set(handles.radiobutton2,'value',0)set(handles.radiobutton3,'value',0)set(handles.radiobutton4,'value',0)lightingflat%function varargout = radiobutton2_Callback(h, varargin)set(h,'value',1)set(handles.radiobutton1,'value',0)set(handles.radiobutton3,'value',0)set(handles.radiobutton4,'value',0)lightinggouraud%function varargout = radiobutton3_Callback(h, varargin)set(h,'value',1)set(handles.radiobutton1,'value',0)set(handles.radiobutton2,'value',0)set(handles.radiobutton4,'value',0)lightingphong%function varargout = radiobutton4_Callback(h, eventdata,
handles,handles,handles,handles,varargin)set(h,'value',1)set(handles.radiobutton1,'value',0)set(handles.radiobutton3,'value',0)set(handles.radiobutton3,'value',0)lightingnone%function varargout = popupmenu2_Callback(h, varargin)val=get(h,'value');switchvalcase1colormap(jet)case2colormap(hot)case3colormap(cool)case4colormap(copper)case5colormap(pink)case6colormap(spring)case7colormap(summer)case8colormap(autumn)case9colormap(winter)
handles,end%function varargout = popupmenu3_Callback(h, varargin)val=get(h,'value');switchvalcase1lightingcase2lightingcase3lightingcase4lightingnone
handles,end%function varargout = popupmenu4_Callback(h, eventdata, varargin)val=get(h,'value');switchvalcase1materialcase2materialcase3materialcase4materialdefaultend%functionvarargout=slider1_Callback(h,eventdata,handles,varargin)val=get(h,'value');set(handles.edit1,'string',num2str(val));lx==val; ly=get(handles.slider2,'value'); light('Position',[xyz]);%functionvarargout=edit1_Callback(h,eventdata,handles,varargin)str=get(h,'string');set(handles.slider1,'value',str2num(str));lx==str2num(str); ly=get(handles.slider3,'value');light('Position',[xyz]);%functionvarargout=slider2_Callback(h,eventdata,handles,varargin)val=get(h,'value');set(handles.edit2,'string',num2str(val));lx=get(handles.slider1,'value'); lx==val; light('Position',[xyz]);%functionvarargout=edit2_Callback(h,eventdata,handles,varargin)str=get(h,'string');set(handles.slider2,'value',str2num(str));%functionvarargout=slider3_Callback(h,eventdata,handles,varargin)val=get(h,'value');set(handles.edit3,'string',num2str(val));%functionvarargout=edit3_Callback(h,eventdata,handles,varargin)str=get(h,'string');set(handles.slider3,'value',str2num(str));*對話框設(shè)計:在圖形用戶界面程序設(shè)計中,對話框是重要的信息顯示和獲取輸入數(shù)據(jù)的用戶界面對象。1、公共對話框:公共對話框是利用windows資源的對話框,包括文件打開、文件保存、顏色設(shè)置、字體設(shè)置、打印設(shè)置等。文件打開對話框:用于打開文件uigetfileuigetfile(‘FilterSpec’)uigetfile(‘FilterSpec’,’DialogTitle’)uigetfile(‘FilterSpec’,’DialogTitle’,x,y)[fname,pname]=uigetfile(…)文件保存對話框:用于保存文件uiputfileuiputfile(‘InitFile’)uiputfile(‘InitFile’,’DialogTitle’)uiputfile(‘InitFile’,’DialogTitle’,x,y)[fname,pname]=uiputfile(…)顏色設(shè)置對話框:用于圖形對象顏色的交互設(shè)置c=uisetcolor(‘h_or_c,’DialogTitle’)字體設(shè)置對話框:用于字體屬性的交互式設(shè)置uisetfontuisetfont(h)uisetfont(S)uisetfont(h,’DialogTitle’)uisetfont(S,’DialogTitle’)S=uisetfont(…)5)打印設(shè)置對話框:用于打印頁面的交互式設(shè)置dlg=pagesetupdlg(fig)pagedlgpagedlg(fig)打印預(yù)覽對話框:用于對打印頁面進行預(yù)覽printpreviewprintpreview(f)打印對話框:printdlgprintdlg(fig)printdlg(‘-crossplatform’,fig)printdlg(-‘setup’,fig)2、MATLAB專用對話框錯誤信息對話框:用于提示錯誤信errordlg 打開默認的錯誤信息對話框errordlg(‘errorstring’)打開顯示’errorstring’信息的錯誤信息對話框errordlg(‘errorstring’,’dlgname’)打開顯示’errorstring’信息的錯誤信息對話框,對話框的標題由‘dlgname’指定erordlg(‘errorstring’,’dlgname’,’on’)打開顯示’errorstring’信息的錯誤信息對話框,對話框的標題由‘dlgname’指定.如果對話框已存在,’on’參數(shù)將對話框顯示在最前端。h=errodlg(…) 返回對話框句柄例:errordlg('輸入錯誤,請重新輸入','錯誤信息')幫助對話框:用于幫助提示信息helpdlg 打開默認的幫助對話框helpdlg(‘helpstring’) 打開顯示’errorstring’信息的幫助對話框,helpdlg(‘helpstring’,’dlgname’)打開顯示’errorstring’信息的幫助對話框,對話框的標題由‘dlgname’指定h=helpdlg(…) 返回對話框句柄例:helpdlg('矩陣尺寸必須相等','在線幫助')輸入對話框:用于輸入信息answer=inputdlg(prompt) 打開輸入對話框,prompt為單元數(shù)組,于定義輸入數(shù)據(jù)窗口的個數(shù)和顯示提示信息,answer為用于存儲輸入數(shù)據(jù)的單元數(shù)組。answer=inputdlg(prompt,title) 與上者相同,title確定對話框的標題。answer=inputdlg(prompt,title,lineNo) 參數(shù)lineNo可以是標量列矢量或m×2階矩陣,若為標量,表示每個輸入窗口的行數(shù)均為lineNo;若為列矢量,則每個輸入窗口的行數(shù)由列矢量lineNo的每個元素確定;若為矩陣,每個元素對應(yīng)一個輸入窗口,每行的第一列為輸入窗口的行數(shù),第二列為輸入窗口的寬度。answer=inputdlg(prompt,title,lineNo,defAns)參數(shù)defans為一個單元數(shù)組,存儲每個輸入數(shù)據(jù)的默認值,元素個數(shù)必須與prompt所定義的輸入窗口數(shù)相同所有元素必須是字符串。answer=inputdlg(prompt,title,lineNo,defAns,Sesize)參數(shù)resize決定輸入對話框的大小能否被調(diào)整,可選值為on或off.例:prompt={'InputName','InputAge'};title='InputNameandAge';lines=[21]';def={'JohnSmith','35'};answer=inputdlg(prompt,title,lines,def);列表選擇對話框:用于在多個選項中選擇需要的值[selection,ok]=listdlg(‘Liststring’,S,…)輸出參數(shù)selection為一個矢量,存儲所選擇的列表項的索引號,輸入?yún)?shù)為可選項’Liststring’(單元數(shù)組),’SelectionMode’(’single’或’multiple’, ’ListSize’([wight,height]), ’Name’(對話框標題)等信息提示對話框:用于顯示提示信息msgbox(message) 打開信息提示對話框,顯示message信息msgbox(message,title) title確定對話框標題。msgbox(message,tit
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年氫能源汽車產(chǎn)業(yè)鏈關(guān)鍵環(huán)節(jié)-加氫站建設(shè)成本與布局前瞻性研究報告
- 2025年有色金屬資源循環(huán)利用產(chǎn)業(yè)鏈技術(shù)創(chuàng)新與產(chǎn)業(yè)政策報告
- 2025年汽車輕量化材料在汽車輕量化車身制造中的研發(fā)成果轉(zhuǎn)化與推廣策略報告
- 理解西方政治制度的操作性問題試題及答案
- 網(wǎng)絡(luò)結(jié)構(gòu)設(shè)計中的關(guān)鍵考量因素試題及答案
- 數(shù)字化轉(zhuǎn)型對小微企業(yè)融資的影響
- 2025年土壤修復(fù)技術(shù)在化工園區(qū)土壤修復(fù)中的應(yīng)用效果及成本效益分析報告001
- 大規(guī)模網(wǎng)絡(luò)的設(shè)計與管理試題及答案
- 軟考網(wǎng)絡(luò)工程師考試成果總結(jié)試題及答案
- 軟件設(shè)計師考試通關(guān)寶典試題及答案
- DZ∕T 0272-2015 礦產(chǎn)資源綜合利用技術(shù)指標及其計算方法(正式版)
- 生命科學(xué)簡史智慧樹知到期末考試答案章節(jié)答案2024年中國科學(xué)技術(shù)大學(xué)
- 2024土地代耕代種協(xié)議書
- 《水電工程巖爆風險評估技術(shù)規(guī)范》(NB-T 10143-2019)
- 預(yù)防術(shù)中低體溫Pdca 課件
- 胃癌診療指南(2022年版)
- 醫(yī)院物業(yè)人員交接方案
- 建筑施工行業(yè)應(yīng)急管理體系建設(shè)
- 逆變器技術(shù)規(guī)范書
- 【要填報的表格】園林行政許可申請表-樹木砍伐、移栽、修剪(洪山園林局專用)
- 傳染病管理工作流程圖預(yù)防醫(yī)學(xué)、衛(wèi)生學(xué)
評論
0/150
提交評論