第7章MATLAB圖形界面設計_第1頁
第7章MATLAB圖形界面設計_第2頁
第7章MATLAB圖形界面設計_第3頁
第7章MATLAB圖形界面設計_第4頁
第7章MATLAB圖形界面設計_第5頁
已閱讀5頁,還剩90頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、nMATLAB的的GUI程序設計可以用兩種方式實現(xiàn),程序設計可以用兩種方式實現(xiàn),一種是借助一種是借助GUI開發(fā)工具開發(fā)工具GUIDE,一種是利用,一種是利用m文件代碼構建界面。采用文件代碼構建界面。采用GUIDE進行設計的方法進行設計的方法直觀方便,容易上手。直觀方便,容易上手。n本章主要介紹利用本章主要介紹利用GUIDE方法進行設計的步驟。方法進行設計的步驟。第第7章章MATLAB 圖形界面設計圖形界面設計7.1 GUI設計工具設計工具Guide簡介簡介nMATLAB提供了用戶圖形界面開發(fā)程序提供了用戶圖形界面開發(fā)程序GUIDE,支,支持可視化編輯。持可視化編輯。n它是一種基于事件或者說是事

2、件驅動的程序(它是一種基于事件或者說是事件驅動的程序(event driven),類似于方便易用的),類似于方便易用的Visual Basic。7.1.1 GUIDE的啟動的啟動n可以如下不同方式啟動可以如下不同方式啟動GUIDE:n1. 在命令窗口提示符下輸入在命令窗口提示符下輸入guide;n2. 在工具欄選打開;在工具欄選打開;n3. 在在Start菜單中選菜單中選MATLAB ;n4. MATLAB File 菜單中選菜單中選New GUI??瞻捉缑嬗锌丶哪0褰缑嬗休S對象和菜單的模板界面標準詢問窗口7.1.2 GUI界面的創(chuàng)建n用戶創(chuàng)建創(chuàng)建新的GUI,也可打開打開已有的GUI。創(chuàng)建界

3、面時還可在模板基礎上進行,在選擇GUI模板時,啟動界面右側提供了預覽。以以“GUI with axes and menu”模板創(chuàng)建的模板創(chuàng)建的GUI初始界面初始界面GUIDE工具欄上的工具按鈕 u對象瀏覽器對象瀏覽器(Object Browser)用于獲得當前Matlab圖形用戶界面程序中的全部對象信息,對象的類型,同時顯示控件的名稱和標識,在控件上雙擊鼠標可以打開該控件的屬性編輯器;u布局編輯器布局編輯器(Layout Edtor)在圖形窗口中創(chuàng)建及布置圖形對象。布局編輯器是可以啟動用戶界面的控制面板,上述工具都必須從布局編輯器中訪問,用用guide命令可以啟動,命令可以啟動,或在啟動平臺窗

4、口中選擇或在啟動平臺窗口中選擇GUIDE來啟動布局編輯器;來啟動布局編輯器;u幾何排列工具幾何排列工具(Alignment Tool)調整各對象相互之間的幾何關系和位置;u屬性查看器屬性查看器(Property Inspector)查詢并設置屬性值;u菜單編輯器菜單編輯器(Menu Editor)創(chuàng)建、設計、修改下拉式菜單和快捷菜單;uTab順序編輯器順序編輯器(Tab Order Editor)用于設置當用戶按下鍵盤上的Tab鍵時,對象被選中的先后順序。 用戶控件用戶控件1對象選擇按鈕,用來選取工作區(qū)的控件。2單功能按鍵,按下操作代表一定功能實現(xiàn)。3雙位按鍵,代表“開”“關”兩種狀態(tài)。4互斥

5、選擇按鈕,多個選項互斥選擇時使用。5互容選擇按鈕,同時選中多個選項時使用。6編輯文本框,可以自由輸入字符和字符串7靜態(tài)文本框,用于顯示注釋,不可編輯。8滑動塊,利用游標滑動,可以獲取不同值。9控件區(qū)域框,用于對控件區(qū)域進行標識。10列表框,提供多個互容的可供選擇選項。11彈出框,有多個選項只能選擇其中一項。12軸對象,用來顯示圖形。按鈕按鈕(Push Buttons):執(zhí)行某種預定的功能或操作;開關按鈕開關按鈕(Toggle Button):產生一個動作并指示一個二進制狀態(tài)(開或關),當鼠點擊它時按鈕將下陷,并執(zhí)行callback(回調函數(shù))中指定的內容,再次點擊,按鈕復原,并再次執(zhí)行call

6、back 中的內容;單選框單選框(Radio Button):單個的單選框用來在兩種狀態(tài)之間切換,多個單選框組成一個單選框組時,用戶只能在一組狀態(tài)中選擇單一的狀態(tài),或稱為單選項;復選框復選框(Check Boxes):單個的復選框用來在兩種狀態(tài)之間切換,多個復選框組成一個復選框組時,可使用戶在一組狀態(tài)中作組合式的選擇,或稱為多選項;文本編輯器文本編輯器(Editable Texts):用來使用鍵盤輸入字符串 的值,可以對編輯框中的內容進行編輯、刪除和替換等操作;靜態(tài)文本框靜態(tài)文本框(Static Texts):僅用于顯示單行的說明文字;滾動條滾動條(Slider): 可輸入指定范圍的數(shù)量值;邊

7、框邊框(Frames):在圖形窗口圈出一塊區(qū)域;列表框列表框(List Boxes):在其中定義一系列可供選擇的字符串;彈出式菜單彈出式菜單(Popup Menus): 讓用戶從一列菜單項中選擇一項作為參數(shù)輸入;此外還有坐標軸(Axes), 用于顯示圖形和圖象。修改控件屬性修改控件屬性n每個控件不可能是完全符合界面設計要求的,需要對其屬性進行設置,以獲得所需界面顯示效果??梢酝ㄟ^雙擊該控件,或利用下拉菜單View: Property Inspector打開控件屬性對話框。例如右圖是“+”按鈕的屬性列表。n下面對各控件的主要屬性進行一下說明。n1) 雙擊設計工作區(qū)空白部分,打開整個圖形窗屬性框。

8、nMunuBar: none %圖形窗是否使用標準菜單nName: caculator %圖形窗名稱nResize: off %圖形窗不能縮放nTag: mainWnd %圖形窗的句柄handles.mainWndn2) 靜態(tài)文本編輯框的屬性設置。nFontSize: 15%字體大小nFontUnits: points%字體大小的度量單位nHorizontalAlignment: Center%對齊方式nString: Expression%待顯示的字符nTag: text1%靜態(tài)文本框句柄handles.text1nUnits: points%文本框度量單位 Units或或FontUnits

9、可選擇:可選擇:inches(英寸英寸),centimeters (厘米厘米), normalized(按比例縮放按比例縮放),points(點陣點陣), pixels (像素像素), characters(字符字符)。如果選擇。如果選擇normalized,那么當,那么當resize設為設為on時,控件或字體大小隨著整個窗口的縮放而改時,控件或字體大小隨著整個窗口的縮放而改變。變。 水平對齊方式水平對齊方式 Horizontal Alignment可以是可以是left, center, right。 控件句柄控件句柄Tag有默認值,建議修改為帶有具體含義的字有默認值,建議修改為帶有具體含義的

10、字符串,以增加程序可讀性和方便回調函數(shù)調用。符串,以增加程序可讀性和方便回調函數(shù)調用。n3) 可編輯文本框的屬性設置。nString: 0%初始狀態(tài)下顯示數(shù)字0nTag: pExp%可編輯文本框的句柄n其它和靜態(tài)文本框相同n4) 單功能按鈕屬性設置。以按鈕“1” 為例nString: 1nTag: p1n其它和靜態(tài)文本框相同。n界面激活n保存靜態(tài)界面后,利用工具欄上的運行按鈕激活該界面。激活后可以看到兩個同名文件:m和fig。nm文件在M文本編輯器中打開, fig文件顯示為操作界面,但是無法實現(xiàn)任何功能,需要編寫回調函數(shù)。n精細調整n利用對齊工具,排列控件的位置,使控件的大小、位置更加協(xié)調。n

11、精細調整n利用對齊工具,排列控件的位置,使控件的大小、位置更加協(xié)調。回調函數(shù)回調函數(shù)n在M文本編輯器中打開m文件,可以看到自動生成的回調函數(shù),該函數(shù)的命名利用對象句柄進行區(qū)分,沒有任何執(zhí)行語句。n回調函數(shù):Tag_Callback(hObject, eventdata, handles),通過加入自己的處理語句,可以實現(xiàn)所需功能。n其中hObject是控件的句柄;eventdata是備用參數(shù),目前沒有定義;handles是用戶數(shù)據(jù),本身是一個結構數(shù)組,存放了當前窗口的所有對象的句柄,包括圖形窗本身、所有控件和菜單的句柄。并且可以增加一些域用來傳遞用戶數(shù)據(jù)。n利用guidata( H, hand

12、les )可以更新 H 的用戶數(shù)據(jù)。7.2 GUI程序設計示例程序設計示例n本節(jié)通過示例,演示本節(jié)通過示例,演示MATLAB的的GUI程序設計。程序設計。“Hello World”程序的設計n下面以一個類似于學習其它程序設計的第一個程序“Hello World”為例,講解GUIDE的有關知識。n程序的目標是當按下按鈕時,由文本控件顯示“Hello World”。 顯示控件名稱的設置界面 對界面左側的控件如果不夠熟悉的話,可以通過FilePreferences選項,選中“Show names in component palette” GUI設計界面在顯示控制圖標的同時,還顯示控件名稱 n1.

13、“Hello World”程序界面設計n2. “Hello World”程序的設計n3. 程序測試運行nGUI設計中的界面設計部分比較容易。在窗口上添加一個按鈕控件(Push Button)和一個文本控件(Static Text)??呻p擊控件調出屬性編輯器進行其屬性設置。n設按鈕控件的“String”屬性為“問候”,“Tag”屬性為“helloBt”,見右圖按鈕屬性設置 n設置文本控件的“String”屬性為空,表示初始狀態(tài)下不顯示任何信息,“Tag”屬性為“helloStr”,為顯示清楚,設其“FontSize”屬性為“28”。見右圖文本控件屬性設置 n“Tag”屬性設置要唯一,因為“Tag

14、”屬性是唯一標識控件的。n至此,我們的界面設計工作完成。n保存時,會生成2個文件,helloworld.fig,helloworld.m。n此外可通過ToolsMenu Editor進行類似于Windows程序的菜單設計。編輯窗口見左圖,效果見右圖。 菜單設計的編輯窗口菜單效果圖利用菜單編輯器可創(chuàng)建、設置、修改下拉式菜單和快捷菜單。選擇 Tools 菜單的 Menu Editor.子菜單,可打開菜單編輯器。菜單編輯器菜單編輯器(Menu Editor)菜單可通過編程實現(xiàn),從GUI設計窗口的工具欄上選擇Menu Editor命令按鈕,打開菜單編輯程序。 菜單編輯器包括菜單的設計和編輯,菜單編輯器

15、有八個快捷鍵,可以利用它們任意添加或刪除菜單,可以設置菜單項的屬性,包括名稱(Label)、標識(Tag)、選擇是否顯示分隔線(Separator above this item)、是否在菜單前加上選中標記(Item is checked)、調用函數(shù)(Callback)。 菜單編輯器左上角的第一個按鈕用于創(chuàng)建一級菜單項。第二個按鈕用于創(chuàng)建一級菜單的子菜單。菜單編輯器左下角有兩個按鈕,選擇第一個按鈕可創(chuàng)建下拉式菜單。選擇第二個按鈕可創(chuàng)建Context Menu菜單。選擇它后,菜單編輯器左上角的第三個按鈕就會變成可用,單擊它就可以創(chuàng)建Context Menu主菜單。在選中已經創(chuàng)建的Context

16、Menu主菜單后,可以單擊第二個按鈕創(chuàng)建選中的Context Menu主菜單的子菜單。與下拉式菜單一樣,選中創(chuàng)建的某個Context Menu菜單,菜單編輯器的右邊就會顯示該菜單的有關屬性,可以設置、修改菜單屬性。 菜單編輯器左上角的第四個與第五個按鈕用于對選中的菜單進行左移與右移,第六與第七個按鈕用于對選中的菜單進行上移與下移,最右邊的按鈕用于刪除選中的菜單。n按照要求,我們可以給按鈕添加動作,即給它編寫一個回調函數(shù)(Callback)。n右鍵單擊按鈕,選擇View CallbacksCallback自動打開helloworld.m文件并指向該回調函數(shù)。n根據(jù)需要為其添加語句。程序將句柄集h

17、andles的helloStr(即文本控件)“String”屬性設置為“Hello World”,即完成了設計要求。n下面這段程序的意思是當點擊按鈕時,即由程序設置文本控件的“String”屬性值為“Hello World”。function helloBt_Callback(hObject, eventdata, handles)set(handles.helloStr,String,Hello World !);n注意回調函數(shù)的概念,它指的是在對象的某一個事件發(fā)生時,MATLAB內部機制允許自動調用的函數(shù)。n其幾個參數(shù)的意思分別為 hObject表示當前窗口的句柄; eventdata表示

18、事件代碼,為保留 handles是該窗口中的所有句柄的集合。n回調函數(shù)有的是針對窗口而言的,有的是對具體控件而言的,學會回調函數(shù)的編寫有助于高效編寫MATLAB GUI程序 n在程序編輯窗口運行測試,或在命令窗口鍵入程序名稱“helloworld”,即可運行。如下圖:n注意: 當不小心將helloworld.fig關掉后,再次編輯需要重新打開。其方法可以通過FileNewGUIOpen Existing GUI來打開。 如按照一般理解選擇FileOpen項的話,只能打開其運行窗口而不可編輯。例例10 使用Push Button按鈕與靜態(tài)文本框設計GUI,在窗口中顯示單擊按鈕次數(shù)。(1) 在界面

19、上安裝一個命令按鈕和一個靜態(tài)文本框(2) 使用對象的屬性窗口設置控件的屬性打開該GUI的 m 文件,文件中已經自動生成代碼。找到函數(shù)function pushbutton1_Callback(hObject, eventdata, handles)在這個函數(shù)名稱下面寫入如下程序段:persistent cif isempty(c) c=0endc=c+1;str=sprintf(Total Clicks: %d,c);set(handles.text1,String,str);保存程序后,單擊Click按鈕,則在什么的文本框中顯示單擊次數(shù)。例例11 制作一個簡易的加減法計算器。(1) 在界面上

20、安裝兩個編輯文本框、一個靜態(tài)文本框與兩個命令按鈕(2) 使用對象的屬性窗口設置控件的屬性 打開該GUI的 m 文件ex11.m,在函數(shù)pushbutton1_Callback 與 pushbutton2_Callback中加入代碼,如下所示:function pushbutton1_Callback(hObject, eventdata, handles)s1=str2double(get(handles.edit1,String)s2=str2double(get(handles.edit2,String)set(handles.text1,String,s1+s2);function pu

21、shbutton2_Callback(hObject, eventdata, handles)s1=str2double(get(handles.edit1,String)s2=str2double(get(handles.edit2,String)set(handles.text1,String,s1-s2);例例12 使用3個單選鈕控制靜態(tài)文本框的背景顏色。function radiobutton1_Callback(hObject, eventdata, handles)set(handles.text1,BackGroundColor,r)function radiobutton2_C

22、allback(hObject, eventdata, handles)set(handles.text1,BackGroundColor,g)function radiobutton3_Callback(hObject, eventdata, handles)set(handles.text1,BackGroundColor,b)function slider1_Callback(hObject, eventdata, handles)v=get(handles.slider1,Value);str=sprintf(%.2f,v);set(handles.text1,String,str);

23、例例13 使用滾動條。例例14 制作一個根據(jù)密度與體積計算質量的簡易計算器。(1) 在界面上布置控件對象。(2) 使用對象的屬性窗口設置控件的屬性。例例15 使用程序把基本控件安裝在圖形窗口上。h1=uicontrol(style,edit,TooltipString,Edit Text)h2=uicontrol(style,checkbox,Position,90,20,30,20,TooltipString,Checkbox)h3=uicontrol(style,listbox,Position,150,20,40,20,TooltipString,Listbox)h4=uicontrol

24、(style,pushbutton,Position,210,20,30,20,TooltipString,Pushbutton)h5=uicontrol(style,radiobutton,Position,260,20,30,20,TooltipString,Radiobutton)h6=uicontrol(style,slider,Position,310,20,30,20,TooltipString,Slider)h7=uicontrol(style,text,Position,370,20,30,20,TooltipString,Static Text)h8=uicontrol(st

25、yle,toggle,Position,430,20,30,20,TooltipString,Togglebutton) 上面程序雖然實現(xiàn)了控件的安裝,但是,還不能完成具體的功能。如果要完成特定的功能,需要加入其他語句。例例16 在圖形窗口底部安裝一個命令按鈕、一個可編輯文本框、一個靜態(tài)文本框。針對命令按鈕(pushbutton)編寫程序,使程序運行后,點擊該命令按鈕,便隨機繪制出一些折線;同時可編輯文本框背景色變?yōu)樗{色,靜態(tài)文本框背景色變?yōu)榧t色。 h1=uicontrol(style,pushbutton,Position,280,0,50,20) set(h1,String,PUSH,Ca

26、llback,fun) 主程序只創(chuàng)建安裝了一個Pushbutton按鈕,然后,在set語句中使用Callback屬性調用函數(shù)fun。 主程序設計如下:function fun plot(rand(3,5) h2=uicontrol(style,edit,TooltipString,Edit Text,Position,80,0,30,20) h3=uicontrol(style,text,Position,440,0,30,20,TooltipString,Static Text) set(h2,BackGroundColor,0 0 1) set(h3,BackGroundColor,1 0

27、 0) 函數(shù)fun代碼如下:在函數(shù)fun中除了繪圖之外,還制作了一個Edit Text、一個Static Text,并且把這兩個控件的背景色設置為藍色0 0 1與紅色1 0 0。例例17 制作依附于某對象的彈出式菜單。m=uicontextmenu;subplot(1,3,1)h1=line(1,2,2,2,LineWidth,8,UIContextMenu,m)c1=subplot(1,3,2);line(1 2,1 3);c2=subplot(1,3,3);plot(rand(2);uimenu(m,Label,line,Callback,c1);uimenu(m,Label,plot,C

28、allback,c2);編寫程序如下:程序運行后,先繪制出右圖第一個圖所示圖形,在藍色寬條上單擊鼠標右鍵,出現(xiàn)菜單,菜單上有兩個選項line與plot,選擇line繪制出右圖第二個圖所示線段;選擇plot繪制出右圖第三個圖所示兩條(隨機)線段。布置控件布置控件:一個坐標系、一個文本框、一個復選框,一個按鈕;定義文本框的屬性:定義文本框的屬性:String-簡單設計示例,F(xiàn)ontName-隸書,F(xiàn)ontSize22;定義坐標系定義坐標系: Visibleoff; 定義按鈕屬性定義按鈕屬性: String開始繪圖,F(xiàn)ontName, ForegroundColor, FontSize, Backg

29、roundColor,Callback-surf(peaks(30);定義復選框定義復選框: String3D旋轉,Callbackrotate3d。例例18 用于繪圖和圖形旋轉的GUI。布局編輯器中編輯完成的圖形用戶界面 運行所創(chuàng)建的圖 形用戶界面程序 點擊按鈕的結果 選擇三維旋轉功能后對圖形進行的旋轉操作 例例19 設計一個簡單信號分析儀的程序,要求根據(jù)輸入的兩個頻率和時間間隔,計算函數(shù) x=sin(2f1t)+sin(2f2t) 的值,并對函數(shù)進行快速傅立葉變換,最后分別繪制時域和頻域的曲線。(一)設計圖形界面(一)設計圖形界面設計步驟:u在布局編輯器中布置控件:本例中使用了2個坐標系、

30、3個文本編輯框、1個按鈕和3個靜態(tài)文本框;u使用幾何位置排列工具對控件的位置進行調整:u設計控件的屬性:為顯示美觀,首先將文本編輯框和靜態(tài)文本框的字號分別設置為20和16,將3個靜態(tài)文本框的標題分別改為“頻率1”、“頻率2”和“時間”,將按鈕的標題改為“繪圖”。u設置其他繪圖屬性。如設置主窗口的標題為“信號分析儀”。上述步驟基本完成了圖形界面的設計,如下圖所示:上述圖形界面設計運行后顯示的圖形如下:其設置如右圖所示(二)設置控件的標識(二)設置控件的標識 控件的標識(Tag)用于對各控件的識別。每個控件在創(chuàng)建時都會由開發(fā)環(huán)境自動產生一個標識,在程序設計中,為了編輯、記憶和維護的方便,一般為控件

31、設置一個新的標識。(三)編寫代碼(三)編寫代碼 GUI圖形界面的功能,還是要通過一定的設計思路和計算方法,由特定的程序來實現(xiàn)。為了實現(xiàn)程序的功能,還需要在運行程序前編寫一些代碼,完成程序中變量的賦值、輸入輸出、計算及繪圖等工作。 本例設置第一個坐標軸的標識為:frequency_axes, 用于顯示頻域圖形; 第二個坐標軸的標識為:time_axes, 用于顯示時域圖形。三個文本編輯框的標識為f1_input, f2_input, t_input,分別用于輸入兩個頻率和自變量時間的間隔。由于不需要返回3個靜態(tài)文本框和按鈕的值,這些控件的標識可以使用缺省值。(1) 從從GUI獲得用戶輸入的數(shù)據(jù)。

32、獲得用戶輸入的數(shù)據(jù)。本例中輸入的3個數(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);1. 設置對象的初始值設置對象的初始值分別設置三個文本編輯框的初始值為:f1_input=20f2_input=50t_input=0:0.001:0.52. 編寫代碼編寫代碼為按鈕的調用函數(shù)編寫代碼,這段代碼放在按鈕的調用函數(shù)pushbutton1_Callback()中,代碼包括以

33、下部分:(2)計算數(shù)據(jù)。)計算數(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)grid on(4)在第二個坐標軸中繪制時域曲線。)在第二個坐標軸中繪制時域曲線。axes(ha

34、ndles.time_axes) %選擇適當?shù)淖鴺溯Splot(t,x)set(handles.time_axes,XminorTick,on)grid on3. 運行程序運行程序n本節(jié)GUI 實現(xiàn)三維圖形的繪制。預創(chuàng)建界面中應包含一個繪圖區(qū)域;一個面板,其中包含三個繪圖按鈕,分別實現(xiàn)表面圖、網(wǎng)格圖和等值線的繪制;一個彈出菜單,用以選擇數(shù)據(jù)類型,并且用靜態(tài)文本進行說明。其草圖如圖所示。n點擊工具欄中的 GUIDE 圖標,啟動 GUIDE,系統(tǒng)打開界面如圖所示。n選擇新建 GUI 標簽,并選擇新建空的 GUI,選中下面的保存選項,輸入文件名,得到結果如圖所示。n該窗口中包括菜單欄、控制工具欄、GU

35、I 控件面板、GUI 編輯區(qū)域等,在 GUI 編輯區(qū)域右下腳,可以通過鼠標拖曳的方式改變 GUI 界面的大小。向界面中添加控件 n首先向界面中添加按鈕。用鼠標點擊 Push Button,并拖曳至 GUI 編輯區(qū),如圖。n在該按鈕上點擊右鍵,選擇 Duplicate,將該按鈕復制兩次,并移動到合適的位置,得到結果如圖。n然后將這三個按鈕添加到面板中。在編輯區(qū)的右側添加面板,并將三個按鈕移動到面板中,得到結果如圖。n下面繼續(xù)向其中添加靜態(tài)文本、彈出菜單和繪圖區(qū),得到結果如圖 。n點擊工具欄中 Property Inspector,打開屬性編輯器。設置各個控件的屬性,如設置按鈕的屬性,設置第一個按

36、鈕的顯示文字為 Surf,標簽名為 surf_pushbutton, 如圖。n設置其他控件的屬性,得到的結果如圖。n點擊工具欄中的綠色箭頭,運行該 GUI,結果如圖。編寫響應函數(shù)n創(chuàng)建 GUI 時系統(tǒng)已經為其自動生成 M 文件,該文件中包含 GUI 中控件對應的響應函數(shù)及系統(tǒng)函數(shù)等。n首先編寫數(shù)據(jù)生成函數(shù)。n在 GUI 向導中點擊 M-file Editor,打開 M 文件編輯器。編輯器中為該 GUI 對應的 M 文件。點擊函數(shù)查看工具顯示其中的函數(shù),選擇 GUIPlot_OpeningFcn 函數(shù),如圖。n該函數(shù)中已有部分內容,現(xiàn)在其中添加數(shù)據(jù)生成函數(shù)。添加后該函數(shù)的內容為:% - Exec

37、utes just before GUIPlot is made visible.function GUIPlot_OpeningFcn(hObject, eventdata, handles, varargin)% This function has no output args, see OutputFcn.% hObject handle to figure% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see

38、 GUIDATA)% varargin command line arguments to GUIPlot (see VARARGIN)% Create the data to plot.handles.peaks=peaks(35);handles.membrane=membrane;x,y = meshgrid(-8:.5:8);r = sqrt(x.2+y.2) + eps;sinc = sin(r)./r;handles.sinc = sinc;% Set the current data value.handles.current_data = handles.peaks;conto

39、ur(handles.current_data)% Choose default command line output for GUIPlothandles.output = hObject;% Update handles structureguidata(hObject, handles);% UIWAIT makes GUIPlot wait for user response (see UIRESUME)% uiwait(handles.figure1);n該函數(shù)首先生成三組數(shù)據(jù),并設置初始數(shù)據(jù)為 peaks 數(shù)據(jù),且初始圖形為等值線。修改該函數(shù)后再次運行 GUI,得到結果如圖 。n

40、繼續(xù)修改按鈕及彈出菜單的響應函數(shù)。用戶可以通過 M文件編輯器中的函數(shù)查看工具查找相應函數(shù),或在GUI編輯器中右鍵點擊 相 應 控 件 , 選 擇 Vi e w Callbacks中的Callback,系統(tǒng)自動打開M文件編輯器,并且光標位于相應的函數(shù)處,如圖。n彈出菜單的響應函數(shù):% - Executes on selection change in data_pop_up.function data_pop_up_Callback(hObject, eventdata, handles)% hObject handle to data_pop_up (see GCBO)% eventdata

41、reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)% Determine the selected data set.str = get(hObject, String);val = get(hObject,Value);% Set current data to the selected data set.switch strval;case Peaks % User selects peaks handles.cu

42、rrent_data = handles.peaks;case Membrane % User selects membrane handles.current_data = handles.membrane;case Sinc % User selects sinc handles.current_data = handles.sinc;end% Save the handles structure.guidata(hObject,handles)% Hints: contents = get(hObject,String) returns data_pop_up contents as c

43、ell array% contentsget(hObject,Value) returns selected item from data_pop_upn該函數(shù)首先取得彈出菜單的 String 屬性和 Value 屬性,后通過分支語句選擇數(shù)據(jù)。n三個按鈕的響應函數(shù)分別為:% - Executes on button press in surfpushbutton.function surfpushbutton_Callback(hObject, eventdata, handles)% hObject handle to surfpushbutton (see GCBO)% eventdata

44、 reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)% Display surf plot of the currently selected data.surf(handles.current_data);% - Executes on button press in meshpushbutton.function meshpushbutton_Callback(hObject, eventdata, handles

45、)% hObject handle to meshpushbutton (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)% Display mesh plot of the currently selected data.mesh(handles.current_data);% - Executes on button press in contourpushbutton.

46、function contourpushbutton_Callback(hObject, eventdata, handles)% hObject handle to contourpushbutton (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)% Display contour plot of the currently selected data.contour(

47、handles.current_data);n再次運行該 GUI,得到最后的結果。控制系統(tǒng)典型環(huán)節(jié)的演示程序n1.程序功能描述n2.程序界面設計n3.程序代碼設計n4.程序測試運行n1.程序功能描述n進行控制系統(tǒng)典型環(huán)節(jié)的演示,包括了典型環(huán)節(jié)運行效果的演示與代碼的展示。也可以在代碼區(qū)輸入繪制曲線語句并通過點擊定制曲線按鈕繪制曲線。n2.程序界面設計程序界面設計 根據(jù)程序功能要求,添加不同控件,并設置控件各自的屬性。n(1) Axes控件控件作用為顯示圖形,典型環(huán)節(jié)的階躍響應曲線及定制曲線都在此處進行顯示?!癟ag”屬性設為myAxes。n(2) Panel控件控件用來盛放其它控件,這里盛放的是

48、代碼區(qū)。“Tag”屬性設為uipanel?!癟itle”屬性設為空。n(3) Edit Text控件控件用于輸入和顯示文本。此處作為代碼區(qū),主要作用為展示典型環(huán)節(jié)的代碼、輸入用戶定制的曲線代碼。 “Tag”屬性設為: strCode。 “String”屬性設為: Please input command for example: x=0:0.1:4*pi; y=sin(x); 這為用戶定制曲線提供了一個例程。n(4) Static Text控件控件作為標識,提示位于其下方的ListBox控件選項是進行典型環(huán)節(jié)演示?!癟ag”屬性設為txtDemo,“String”屬性設為典型環(huán)節(jié)演示。n(5)

49、 ListBox控件控件類似于一組復選框,用戶可從中選擇不同選項。 “Tag”屬性設為: lstBox “String”屬性設為: 比例環(huán)節(jié) 慣性環(huán)節(jié) 比例微分環(huán)節(jié) 比例積分環(huán)節(jié)表示此列表共有4項內容即4個典型環(huán)節(jié)可選。n(6) Push Button控件控件表現(xiàn)為一個按鈕。本例中使用了兩個此控件。一個用于定制曲線的繪制定制曲線的繪制。 用戶在代碼區(qū)輸入繪制曲線語句后,點擊此按鈕進行曲線繪制?!癟ag”屬性設為btnDraw,“String”屬性設為定制曲線,“TooltipString”屬性設為在代碼區(qū)中輸入曲線參數(shù),繪制任意曲線。這樣當用戶將光標置于按鈕上時,會有相應提示信息。一個用于關閉

50、運行窗口關閉運行窗口?!癟ag”屬性設為btnClose,“String” 屬性設為關閉,“TooltipString”屬性設為關閉窗口。設定完成的界面草圖如圖n至此,本例所需的控件已設置完畢。在最初按照草圖添加部署了所有的控件后,往往不會排列得很整齊。此時可根據(jù)需要進行控件的排列。n要將位于窗口右側的4個控件豎排整齊,則可在窗口選ToolAlign Objects彈出的窗口中進行選擇。n3.程序代碼設計n根據(jù)要求,在選擇典型環(huán)節(jié)時需要設置回調函數(shù)。此外,對兩個按鈕控件也要設置回調函數(shù)。n回調函數(shù)的生成在前一個例子已講過,這里不重復。這里只給出相應的代碼段供參考。 (1) 定制曲線按鈕的回調函數(shù)function btnDraw_Callback(hObject, e

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論