實驗八圖形用戶界面設計_第1頁
實驗八圖形用戶界面設計_第2頁
實驗八圖形用戶界面設計_第3頁
實驗八圖形用戶界面設計_第4頁
實驗八圖形用戶界面設計_第5頁
已閱讀5頁,還剩25頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、實驗八圖形用戶界面(GUI設計(說明:本次實驗在4學時內獨立完成一、實驗目的1. 熟悉各種控件和界面菜單的制作。2. 學會編寫控件對象的回調程序(callback函數(shù)。3. 熟練使用GUI開發(fā)工具GUIDE設計用戶界面。二、實驗預備知識圖形用戶界面(Graphical User Interface,簡稱GUI 是指由窗口、光標、按鍵、菜單、文字說明等對象構成的一個人與計算機的交互界面。用戶通過一定的方法(如鼠標或鍵盤選擇、激活這些圖形對象,使計算機產生某種動作或變化,比如實現(xiàn)計算、繪圖等。GUI 的最重要組成是用戶菜單(uimenu和用戶控件(uicontrol。關于界面菜單,可以參考課件相關

2、部分的介紹,這里主要介紹控件的類型、屬性和制作方法。1.用戶控件的類型控件是事件響應的圖形對象。當某一事件發(fā)生時,應用程序會做出響應并執(zhí)行某些預定的功能子程序(即回調函數(shù)Callback。MATLAB中有10種不同類型的控件(下圖:單功能按鈕(Push Button;單選按鈕(Radio Button;雙位按鈕(Toggle Button;復選框(Check Box;列表框(List Box;彈出框(Popup Menu;靜態(tài)文本框(Static Text;可編輯文本框(Edit Text;滑標或滾動條(Slider;框架(Frame。這些控件大致可分為兩種,一種為動作控件,鼠標點擊這些控件時

3、會產生 相應的響應;一種為靜態(tài)控件,是不產生響應的控件,如靜態(tài)文本框等。表1給出了各種控件的描述。2.用戶控件的屬性每種控件都有一些可以設置的屬性參數(shù),用于表現(xiàn)控件的外形、功能及效果。屬性由兩部分組成:屬性名和屬性值,它們必須是成對出現(xiàn)的。用戶可以在創(chuàng)建控件對象時,設定其屬性值,未指定時將使用系統(tǒng)缺省值。下面介紹部分較常用的控件屬性:Tag取值為字符串,定義了控件的標識(標簽,在任何程序中都可以通過這個標識控制該控件對象。Style表明控件對象的類型,取值為表1所列10種當中之一。String定義控件對象的標題或選項內容(即控件上用戶想要顯示的內容,取值為字符串或數(shù)組。Units單位屬性,取值

4、可以是pixels, normalized(歸一化, inches, centimeters或points。GUI設計時經常使用歸一化單位。表1:各種控件的外形、特征及應用 Position 指明控件的位置。其值是4元素向量left bottom width height, 前2個指明控件左下角在其父對象(一般是圖形窗左下角的位置,后兩個指明控件的高度和寬度。這些值的單位由Units屬性給出。Max 控件的最大值屬性,其值為一標量,不同的控件類型有不同的最大值屬性。默認值是1。對于滑標(滾動條,Max屬性值定義了滑標的最大值;對于彈出式菜單,則定義了最大下標值;對于可編輯文本框,當Ma x-M

5、in >1 時,可編輯多行文本。Min 控件的最小值屬性,其值為一標量,不同的控件類型有不同的最小值屬性。默認值是0。對于滑標,Min屬性值定義了滑標的最小值;對于彈出式菜單,則定義了最小下標值。Value控件的當前值屬性,其值為一標量或向量,取決于控件類型。單選按鈕以及復選框被選中(on 態(tài)時,其當前值屬性Value的屬性值應設定為Max屬性的值(即該控件類型的最大值;反之未被選中時(off態(tài),默認,則Value屬性設定為Min的屬性值。對于滑標,其Value屬性值的設置范圍是Min, Max;對于彈出式菜單,把Value 值設置為1時,表示選中第一項,設置2則選中第二項,以此類推,反

6、之,選中第一項,則彈出菜單的value值為1,.;文本對象和功能按鈕無此屬性。Callback回調屬性,其值為字符串,可以是某個M文件名或一小段MATLAB語句,當用戶激活某個控件對象時,應用程序就運行該屬性定義的子程序,使控件產生動作。后面將重點介紹callback程序的編寫。3.制作用戶控件用戶控件通過使用命令uicontrol來制作,其使用格式為:H=uicontrol(H_parent,PN,PV,其中,H是用戶控件的句柄,H_parent是其父對象句柄。PN,PV為(屬性名,屬性值二元組,用來定義控件的屬性。例1:h1=uicontrol(gcf,'style',&#

7、39;radio','string','斜體', 'units',.'normalized','position',0.6 0.4 0.1 0.05;% 用uicontrol指令在當前窗口創(chuàng)建一個單選按鈕(radiobuttonset(h1,Value,get(h1,Max; % 單選按鈕“斜體”默認為選中狀態(tài)h2=uicontrol(gcf,'style','slider','Max',2.02,'Min',0.02,.'slider

8、step',0.01 0.05,'value',0.5,'units','normalized',.'position',0.6 0.48 0.2 0.05;%該語句創(chuàng)建了一個滑標,其中Max和Min屬性的值決定了滑標表示的數(shù)值的上下限,即0.02 2.02?;瑯说膕liderstep屬性是一個二元數(shù)組,第一個元素決定由兩端箭頭操縱滑動時的步長(微調,本例為0.01×(2.02-0.02;第二個元素決定游標操縱滑動時的步長(粗調,本例為0.05×(2.02-0.02。h3=uicontrol(gcf,&

9、#39;style','text','string','當前滑標值=0.5',.'units','normalized','position',0.6 0.55 0.2 0.04; %創(chuàng)建文本框set(h2,'callback','z=get(gcbo,''value''','set(h3,''string'', ''當前滑標值='',num2str(z&#

10、39;% 在文本框顯示滑標當前值;gcbo 返回當前正在執(zhí)行回調動作的對象(此處是h2的句柄h_check1=uicontrol(gcf,'style','checkbox','string',.'最大峰值','units','normalized','position',0.6 0.32 0.2 0.04;h_check2=uicontrol(gcf,'style','checkbox','string','上升時間(0-&g

11、t;0.95','units','normalized','position',.0.6 0.25 0.2 0.04;% 創(chuàng)建2個復選框程序運行結果如圖所示,若只勾選第一個復選框“最大峰值”,則該控 件的當前值value等于最大值Max(=1,第二個復選框的當前值value值則等于最小值Min(=0。在命令窗口輸入get(h_check1,'value'以及get(h_check2,'value'可以查看到兩個復選框的當前值。5.編寫回調函數(shù)設置控件之后,要想讓控件產生動作,完成用戶的意圖就需要合理設置控件

12、的回調屬性(callback,把能完成用戶意圖的一條或幾條滑標對象h2的callback屬性值(單引號對中的內容包含下列2條指令z=get(gcbo,'value'set(h3,'string','當前滑標值=',num2str(z;% 用構成字串矩陣這兩條指令的目的是把滑標選擇的數(shù)值實時地在文本框h3中顯示出來。第一條指令是獲取當前正在執(zhí)行回調動作的對象(即滑標的移動的當前值value,第二條指令是把該值作為文本框(h3是其句柄的顯示字串。注意,這里z是數(shù)值,把它顯示為字符時,要用num2str 函數(shù)先轉換成字符型數(shù)據(jù)。如果回調屬性有較多條Ma

13、tlab語句,為了提高效率,一般把它們集中寫成一個函數(shù)M 文件,稱之為回調函數(shù)(callback函數(shù)。其一般格式: 上例中,如果把回調程序寫成M文件,則代碼如下:function callslider(h2,h3z=get(h2,'value'set(h3,'string','當前滑標值=',num2str(z;相應地,callback屬性值應改為回調函數(shù)名:set(h2,'callback',callslider(h2,h3;該指令將調用回調函數(shù),并把滑標句柄h2和文本框句柄h3傳遞給回調函數(shù)的輸入參數(shù)。6.GUI開發(fā)環(huán)境(GU

14、I Development Environment, GUIDEMATLAB提供了一套可視化的創(chuàng)建圖形用戶界面的工具GUIDE,使用GUIDE可方便的創(chuàng)建GUI應用程序,無需用戶編寫繁瑣的控件和菜單的創(chuàng)建程序。它可以根據(jù)用戶設計的GUI布局,自動生成M文件的框架,用戶使用這一框架編制自己的應用程序。打開GUI開發(fā)工具GUIDE的方法:在命令窗口輸入guide,出現(xiàn)下圖所示的對話窗。 點選Blank GUI(Default,再點OK,引出GUI空白界面編輯器,如下圖所示。圖中左側的“對象模板區(qū)”呈現(xiàn)的所有控件和組件的默認外形,若想使控件、組件圖標和其名稱一起顯示,應采用下列步驟設置:點擊界面編輯

15、器的菜單項File->Preference,引出GUI選項設置界面;勾選“Show names in component palette”項,再點擊OK;一般來說,在利用界面編輯器設計應用界面之前,應根據(jù)任務要求繪制應用界面的草圖,合理地布局各個控件,然后再使用界面編輯器設計、制作自己的GUI界面。 圖:GUI界面編輯器三、實驗內容及要求1. 實例練習一上機練習指導書中例1的程序,初步熟悉控件的制作、控件屬性的設置以及回調函數(shù)的編寫。2. 實例練習二電子波動性MATLAB仿真的界面設計練習給實驗五設計 GUI界面。界面要求如下:縫寬a,縫間距b,觀察屏的距離D以及加速電壓U通過界面輸入;

16、可選擇電子數(shù)N=200、N=2000、N=20000;可選擇繪制概率密度的理論分布曲線;能設置坐標軸背景色和電子顏色。界面布局(草圖如圖所示。其中使用:1個軸對象(Axes,用于顯示圖形、5個靜態(tài)文本框(Static text,注釋用。一個顯示標題,其余四個顯示參數(shù)名、4個編輯框(Edit text,用于輸入參數(shù)值、1個彈出框(Popup menu,提供3種互斥選項、1個單選按鈕(Radio button、1個單功能按鈕(Push button,用于運行仿真、2個界面菜單(用于顏色設置。繪制好草圖之后,進入GUIDE開發(fā)環(huán)境設計界面。具體步驟如下:開啟GUI界面編輯器命令窗口輸入guide指令

17、,點選Blank GUI(Default,引出GUI空白界面編輯器。為界面設計工作區(qū)引入坐標參考系目的是為了方便在界面上進行控件的布置。方法:點擊界面編輯器菜單Tools Grid and Rulers,彈出對話框,全部勾選即可(網格的大小可選。界面窗屬性設置拖拉界面設計工作區(qū)右下角的小黑方塊句柄,使其長寬調整到希望的大小,它就是未來應用界面出現(xiàn)時的“默認大小”。雙擊界面編輯器的設計工作區(qū),引出“窗屬性編輯器”(下圖,設置下列屬性值:Resize on % 該設置很重要,它決定未來界面窗是否可縮放Units normalized % 采用歸一化單位計量窗口大小和位置,縮放時將保持該比例 根據(jù)要

18、求進行界面的構建按照前面的草圖,布置各個控件和組件。“軸”組件的創(chuàng)建在對象模板區(qū),點選“軸(Axes”圖標到設計工作區(qū)的適當位置;用鼠標拉出適當大小的“軸位框”,以供繪制電子的衍射圖形使用;雙擊軸位框,引出“屬性編輯器(Property Inspector”,進行如下屬性設置:Units normalized % 采用相對度量單位,縮放時保持軸與界面之間的比例NextPlot add % 相當于hold on 功能,以添加的方式繪制多個電子圖形Box on % 封閉軸位框XLim -5e-5 5e-5 % X軸范圍YLim -4e-5 4e-5 % Y軸范圍要注意Tag(標簽屬性的值,其默認值

19、是Aexs1,可以改。在回調函數(shù)中就是通過這個標識名來控制該對象的。另外,通過改變Position屬性的4個值(它們的單位是相對單位,即normalized,還可以精確調整軸位框的位置和大小(下同。制作顯示大標題的“靜態(tài)文本框”控件所設計的GUI界面總計有5個靜態(tài)文本框,一個用于顯示大標題,其余四個顯示仿真參數(shù)的名稱。先介紹顯示標題的靜態(tài)文本框的制作,其余的后面介紹。點選對象模板區(qū)的“Static Text”圖標到設計工作區(qū)上端的適當位置,并用鼠標拉出適當?shù)拇笮?提示:還可以在Position屬性中精確調整其大小。雙擊靜態(tài)文本框,引出屬性編輯器,設置屬性:Units normalized %

20、采用相對度量單位,窗縮放時保持與界面之間的比例String 電子波動性的MA TLAB仿真% 顯示大標題Tag text1 % 該文本框的標識名,默認值text1,可以改FontUnits normalized % 采用相對度量單位,窗縮放時保持字體大小比例FontSize 0.5 % 框內字體的相對大小(框高度為1FontWeight Bold % 粗體字制作“組件盤”下面引入“組件盤(Panel”作為仿真的參數(shù)區(qū)。在組件盤內集中布置4個顯示仿真參數(shù)名的靜態(tài)文本框和4個輸入參數(shù)值的可編輯文本框以及1個彈出框(見草圖。點選模板區(qū)的“組件盤(Panel”圖標到軸位框右側的適當位置(參見草圖,并拉

21、出適當?shù)拇笮∫匀菁{8個文本框和1個彈出框。雙擊組件盤,引出屬性編輯器,設置屬性:Units normalized % 采用相對度量單位,縮放時保持與界面之間的比例Tag uipanel1 % 默認值的標識名,可以改Title 仿真參數(shù)% 組件盤的標題TitlePosition centertop% 標題位置FontSize 9.0 % 框內字體的相對大小(單位points 順便指出,當字體大小的單位選為normalized時,FontSize總顯示為-1,而無法設置。制作4個顯示仿真參數(shù)名的“靜態(tài)文本框”控件點選4個對象模板區(qū)的“Static Text”圖標到組件盤的適當位置(參考草圖,并用鼠

22、標拉出適當?shù)拇笮?。雙擊其中第一個靜態(tài)文本框,引出屬性編輯器,設置屬性:Units normalized % 采用相對度量單位,縮放時保持與界面之間的比例String a(nm % 縫寬a,單位nmTag text2 % 該文本框的標識名,默認值text2,可以改FontUnits normalized % 采用相對度量單位,縮放時保持字體大小比例FontSize 0.6 % 框內字體的相對大小(框高度為1仿照上述方法,依次設置其余3個靜態(tài)文本框的屬性。制作4個用于輸入相應參數(shù)值的“可編輯文本框(Edit Text”點選4個對象模板區(qū)的“Edit Text”圖標到組件盤的適當位置(注意與相應參數(shù)

23、對應,參考草圖,并用鼠標拉出適當?shù)拇笮 kp擊其中第一個文本框(用于輸入參數(shù)a的值,引出屬性編輯器,設置屬性:Units normalized % 采用相對度量單位,縮放時保持與界面之間的比例String 200 % 縫寬a為200nmTag edit1 % 該文本框的標識名,默認值edit1,可以改FontUnits normalized %采用相對度量單位,縮放時保持字體大小比例FontSize 0.5 % 框內字體的相對大小(框高度為1仿照上述方法,依次設置其余3個編輯文本框的屬性,各參數(shù)初始值:縫間距b=1 m,加速電壓U=1000V,觀察屏距離D=0.25m。制作“彈出框(Pop-up

24、 Menu”點選對象模板區(qū)的“Pop-up Menu”圖標到組件盤的適當位置(參考草圖,并用鼠標拉出適當?shù)拇笮?。雙擊彈出框,引出屬性編輯器,設置屬性:Units normalized % 采用相對度量單位,縮放時保持與界面之間的比例String N=2000N=200N=20000 % 三種可供選擇的電子數(shù)目,注意要寫成3行的形式Tag popupmenu1 % 該文本框默認的標識名,可以改FontUnits normalized %采用相對度量單位,縮放時保持字體大小比例FontSize 0.6 % 框內字體的相對大小(框高度為1Value 1.0 % 彈出框的當前值屬性的默認值,=1 默認

25、選第一項,=2 選第二項,=3 第三項至此,組件盤內的快件都已制作完畢。如果拖動組件盤,則組件盤內所有的控件都將隨之移動。注意,“先有組件盤,然后把控件放置在組件盤”的次序不能顛倒,否則各組件不會隨之移動。制作“按鈕組(Button Group”草圖中有2個按鈕:單選按鈕(radio button和單功能按鈕(push button。類似于上面組件盤的引入,這里引入按鈕組,將這2個按鈕統(tǒng)統(tǒng)放置其中。這樣整個界面顯得干凈,整齊。點選模板區(qū)的“按鈕組(Button Group”圖標到組件盤下方的適當位置(參見草圖,并拉出適當?shù)拇笮∫匀菁{至少2個按鈕。雙擊Button Group,引出屬性編輯器,設

26、置屬性:Units normalized % 采用相對度量單位,縮放時保持與界面之間的比例Tag uipanel2 % 默認值的標識名,可以改Title % 按鈕組的標題為空,也可設置制作“單選按鈕(Radio Button”點選模板區(qū)的“單選按鈕(Radio Button”圖標到按鈕組中的適當位置(參見草圖,并拉出適當?shù)拇笮 kp擊單選按鈕,引出屬性編輯器,設置屬性:Units normalized % 采用相對度量單位,縮放時保持與界面之間的比例String 概率密度理論曲線% 注釋字串Tag radiobutton1 % 默認標識名FontUnits normalized %采用相對度量單

27、位,縮放時保持字體大小比例FontSize 0.55 % 框內字體的相對大小(按鈕高度為1Value 0 % 單選按鈕當前值屬性的默認值,=0 默認不選,=1默認選取制作“單功能按鈕(Push Button”點選模板區(qū)的“單功能按鈕(Push Button”圖標到按鈕組中的適當位置(參見草圖,并拉出適當?shù)拇笮 kp擊單功能按鈕,引出屬性編輯器,設置屬性:Units normalized % 采用相對度量單位,縮放時保持與界面之間的比例String 運行仿真% 注釋字串Tag pushbutton1 % 默認標識名FontUnits normalized % 采用相對度量單位,縮放時保持字體大小比

28、例FontSize 0.5 % 框內字體的相對大小(按鈕高度為1制作界面菜單點擊GUI界面編輯器的菜單Tools Menu Editor引入菜單編輯器,如下圖所示。點擊菜單編輯器界面上的“New Menu”圖標后,在編輯器的“Menu Bar”頁左側的菜單結構框里就出現(xiàn)未命名的菜單“Untitled1”。點擊未命名菜單“Untitled1”,在編輯器右側的“菜單屬性(UIMenu Properties”欄里,就會出現(xiàn)需要填寫的若干屬性條目。填寫或者勾選屬性條目如下:Label 背景顏色% 菜單名 Tag Menu1 % 菜單的標識,回調函數(shù)中通過該標識名控制該菜單Enable this ite

29、m 勾選% 使該菜單可操作再給“背景顏色”菜單創(chuàng)建2個子菜單:“黑色”和“白色”子菜單。點擊菜單編輯器的工具圖標,就會在菜單結構框的“背景顏色”菜單下衍生出一個未命名的子菜單“Untitled2”。在該子菜單的屬性欄中設置:Label 黑色% 子菜單名Tag Menu11 % 子菜單的標識類似地,創(chuàng)建第二個子菜單“白色”菜單,其屬性Label 白色% 子菜單名Tag Menu12 % 子菜單的標識仿照上述方法,再創(chuàng)建一個名為“電子顏色”的頂層菜單,其下包含2個子菜單:“紅色”和“白色”子菜單。菜單屬性分別設置如下:Label 電子顏色% 頂層菜單名Tag Menu2 % 頂層菜單的標識Labe

30、l 紅色% 第一個子菜單名Tag Menu21 % 第一個子菜單的標識Label 白色% 第二個子菜單名Tag Menu22 % 第二個子菜單的標識制作后的菜單結構如圖所示。 至此,本題的GUI界面制作完畢。保存界面之后(文件名ElectronsWave_GUI,系統(tǒng)會生成2個文件,一個是.fig文件,用于保存界面的制作代碼;另一個是.m文件,用于編寫回調函數(shù)。點擊界面編輯器上的圖標運行GUI界面,將出現(xiàn)草圖所示的效果。但是,目前的應用界面還只是“靜態(tài)”的界面,無法“動”起來。要想使得各個控件能執(zhí)行用戶的意圖,必須編寫回調函數(shù)(callback函數(shù)。在系統(tǒng)生成的m文件中,包含有界面上各個控件的

31、回調函數(shù)的模板,找到各個控件的回調函數(shù),在其中做相應的更改即可。要正確編寫回調函數(shù),首先要了解GUIDE自動生成的ElectronWave_GUI.m文件的結構。GUIDE自動生成的M文件的結構點擊界面編輯器上的圖標,可以打開ElectronWave_GUI .m文件。該M文件是一個主函數(shù),內含若干個回調子函數(shù),具體結構和相關說明如下:主函數(shù)function varargout = ElectronsWave_GUI(varargin子函數(shù)界面啟動子函數(shù)和輸出子函數(shù)function ElectronsWave_GUI_OpeningFcn(hObject, eventdata, handles

32、, vararginfunction varargout = ElectronsWave_GUI_OutputFcn(hObject, eventdata, handles編輯框回調子函數(shù)組(4個function edit1_Callback(hObject, eventdata, handlesfunction edit2_Callback(hObject, eventdata, handlesfunction edit3_Callback(hObject, eventdata, handlesfunction edit4_Callback(hObject, eventdata, handl

33、es彈出框回調子函數(shù)function popupmenu1_Callback(hObject, eventdata, handles單功能按鈕回調子函數(shù)function pushbutton1_Callback(hObject, eventdata, handles單選按鈕回調子函數(shù)function radiobutton1_Callback(hObject, eventdata, handles界面菜單回調子函數(shù)組(6個,上面3個設置背景色,下面3個設置電子顏色function Menu1_Callback(hObject, eventdata, handlesfunction Mneu11

34、_Callback(hObject, eventdata, handlesfunction Menu12_Callback(hObject, eventdata, handlesfunction Menu2_Callback(hObject, eventdata, handlesfunction Menu21_Callback(hObject, eventdata, handlesfunction Menu22_Callback(hObject, eventdata, handles應該指出,上述函數(shù)結構具有典型性:每個由GUIDE自動生成的M文件都包含主函數(shù)、界面啟動函數(shù)(OpeningFc

35、n和輸出子函數(shù)。而且子函數(shù)名的構成形式也都一樣,即由“用戶輸入的保存文件名”加固定的OpeningFcn或OutputFcn字節(jié)構成。啟動函數(shù)的執(zhí)行時間發(fā)生在GUI所有組件創(chuàng)建之后(即CreateFcn運行之后,但在將它們顯示在屏幕之間,其任務是為GUI的使用準備數(shù)據(jù)和界面形態(tài)(即初始化,限于篇幅,這里不介紹啟動函數(shù)的編寫?;卣{子函數(shù)與用戶界面上的控件相對應,而且函數(shù)的命名有個特點,就是對應控件的標識名(即Tag屬性值加上固定的Callback字節(jié)。比如本例中,有2個按鈕radio button 和push button,和它們對應的回調函數(shù)有分別是:radiobutton1_Callback

36、和pushbutton1_Callback?;卣{子函數(shù)體內,需要用戶自己編寫代碼,以實現(xiàn)該控件被觸發(fā)后,產生相應操作,完成用戶意圖。所有子函數(shù)都有3個相同的參數(shù):hObject,eventdata, handles。參數(shù)意義說明如下:hObject 代表正在執(zhí)行回調的控件的句柄或者說和該子函數(shù)對應的控件的句柄。eventdata 保留參數(shù),供以后版本升級使用。handles 結構體。GUI的控件、界面菜單、Axes等圖形對象的句柄以及用戶數(shù)據(jù)就保存在該結構體中,以實現(xiàn)數(shù)據(jù)的共享。例如當建立一個標識Tag=mytext的靜態(tài)文本框時,該控件的句柄值就保存在該結構體的一個域中:handles.my

37、text(域名就是該控件的Tag屬性值。通過該控件的句柄,我們就可以索取該控件所有的信息同時也可以更改該控件的屬性。例如,利用get(handles.mytext,string可以獲取標識名為mytext的靜態(tài)文本框的字串屬性的當前值。利用s et(handles.mytext,string,屬性值;guidata(hObject,handles;可以更改其string屬性值。注意:無論何時,只要是更新了結構體handles,就必須及時地使用guidata指令保存這種更新,否則更新是無效的!guidata指令的使用格式固定為上述形式。另外,還可以給結構體handles開辟新的域,用來保存用戶的

38、數(shù)據(jù),比如在本例中 handles.a=str2num(get(handles.edit1,string;guidata(hObject,handles首先獲取Tag屬性值為edit1的可編輯文本框的輸入字串(即參數(shù)a的值,注意鍵盤輸入的其實是字符型數(shù)據(jù),然后轉換成數(shù)值型數(shù)據(jù),即參數(shù)a的值200,最后把它存放在結構體handles一個新的域a中。所以handles.a的內容就是200。注意結構體handles 更新后要及時用guidata保存。最后指出,結構體handles中的數(shù)據(jù)可以在所有子函數(shù)中共享。比如在任意一個子函數(shù)體內,指令get(handles.mytext,string都可以獲取

39、標識名是mytext的控件的string屬性值。再如,在任意子函數(shù)內,指令handles.a都可以提取保存在域名a 中的用戶數(shù)據(jù)。編寫回調函數(shù)這是最后一步工作。本例GUI界面的設計意圖是:首先設置好背景色和電子的顯示色,然后輸入各種仿真參數(shù)以及點選各個選項,最后運行仿真。因此只需編寫兩種回調函數(shù):“設置顏色”的回調函數(shù)和“運行仿真”的回調函數(shù)。在前者中完成相應色彩的設置,在后者中首先要獲取各個文本框輸入的參數(shù)和各種選項,然后再繪制相應的電子衍射圖形。對設置背景色的菜單編寫回調函數(shù)本例設置了黑色和白色兩種背景,相應子菜單的標識名(即Tag屬性值分別為Menu11和Menu12(可在菜單編輯器Me

40、nu Editor中查看。打開ElectronWave_GUI .m文件,找到設置黑色背景的子菜單的回調函數(shù)Menu11_Callback,在該函數(shù)體內空白處添上下列指令: set(handles.axes1,'color','k' % 設置標識名為axes1的軸對象(界面左側坐標軸的顏色屬性為黑色當鼠標點擊界面上的黑色菜單時,系統(tǒng)就會執(zhí)行和該菜單聯(lián)系的回調函數(shù)Menu11_Callback,也即執(zhí)行上面的set指令,使得軸位框背景為黑色。類似地,找到設置白色背景的子菜單的回調函數(shù)Menu12_Callback,在該函數(shù)體內空白處添上下列指令即可:set(han

41、dles.axes1,'color','w'對設置電子顯示色的菜單編寫回調函數(shù)本例設置了紅色和白色兩種電子顯示色,相應子菜單的標識名(即Tag屬性值分別為Menu21和Menu22(可在菜單編輯器Menu Editor中查看。在ElectronWave_GUI .m文件,找到設置紅色的子菜單的回調函數(shù)Menu21_Callback,在該函數(shù)體內空白處添上下列指令: handles.ElectronsColor='r'guidata(hObject,handles;第一句給結構體handles創(chuàng)建了一個新的域ElectronsColor,用來存放電

42、子的顯示色(字符型數(shù)據(jù),此處是紅色r;第二句是保存更新(必須!在下面編寫“運行仿真”按鈕的回調函數(shù)時,將調用域ElectronsColor中的內容,作為繪制電子圖形時的顯示色。類似地,找到設置白色的子菜單的回調函數(shù)Menu22_Callback,在該函數(shù)體內空白處添上下列指令:handles.ElectronsColor='w'guidata(hObject,handles;編寫“運行仿真”按鈕的回調函數(shù)在ElectronWave_GUI .m文件中,找到和該按鈕聯(lián)系的回調函數(shù)pushbutton1_Callback,或者右鍵點擊界面上的“運行仿真”按鈕,在彈出的菜單中點選Vi

43、ew Callbacks Callback,可以快速切換到回調函數(shù)pushbutton1_Callback。編寫該回調函數(shù)時,首先要獲取各個文本框輸入的參數(shù)和各種控制選項,然后再繪制相應的電子衍射圖形。在該回調函數(shù)的空白處輸入下列代碼:% 獲取各個編輯文本框輸入的參數(shù)a=1e-9*str2num(get(handles.edit1,'string'b=1e-6*str2num(get(handles.edit2,'string'U=str2num(get(handles.edit3,'string'D=str2num(get(handles.ed

44、it4,'string'lamda=1.225e-9/sqrt(U*(1+9.783e-7*U; % 電子波長A=pi*a/(lamda*D;B=pi*(a+b/(lamda*D;switch get(handles.popupmenu1,'value' % 獲取彈出框中的選項case 1N=2000;case 2N=200;case 3N=20000;otherwiseend% 是否選擇繪制概率密度理論曲線if get(handles.radiobutton1,'value'=1 % 選中figure; % 創(chuàng)建新圖形窗,并將其裂為2個子窗口,以便對照2個結果圖subplot(2,1,2 % 在該子窗口中繪制概率

溫馨提示

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

評論

0/150

提交評論