實驗八圖形用戶界面設計

上傳人:沈*** 文檔編號:158902075 上傳時間:2022-10-07 格式:DOC 頁數:16 大?。?.68MB
收藏 版權申訴 舉報 下載
實驗八圖形用戶界面設計_第1頁
第1頁 / 共16頁
實驗八圖形用戶界面設計_第2頁
第2頁 / 共16頁
實驗八圖形用戶界面設計_第3頁
第3頁 / 共16頁

下載文檔到電腦,查找使用更方便

10 積分

下載資源

還剩頁未讀,繼續(xù)閱讀

資源描述:

《實驗八圖形用戶界面設計》由會員分享,可在線閱讀,更多相關《實驗八圖形用戶界面設計(16頁珍藏版)》請在裝配圖網上搜索。

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

2、menu)和用戶控件(uicontrol)。關于界面菜單,可以參考課件相關部分的介紹,這里主要介紹控件的類型、屬性和制作方法。 1. 用戶控件的類型 控件是事件響應的圖形對象。當某一事件發(fā)生時,應用程序會做出響應并執(zhí)行某些預定的功能子程序(即回調函數Callback)。MATLAB中有10種不同類型的控件(下圖): ①單功能按鈕(Push Button);②單選按鈕(Radio Button);③雙位按鈕(Toggle Button);④復選框(Check Box);⑤列表框(List Box);⑥彈出框(Popup Menu);⑦靜態(tài)文本框(Static Text);⑧可編輯文本框(E

3、dit Text);⑨滑標或滾動條(Slider);⑩框架(Frame)。 這些控件大致可分為兩種,一種為動作控件,鼠標點擊這些控件時會產生相應的響應;一種為靜態(tài)控件,是不產生響應的控件,如靜態(tài)文本框等。 表1給出了各種控件的描述。 2. 用戶控件的屬性 每種控件都有一些可以設置的屬性參數,用于表現控件的外形、功能及效果。屬性由兩部分組成:屬性名和屬性值,它們必須是成對出現的。 用戶可以在創(chuàng)建控件對象時,設定其屬性值,未指定時將使用系統(tǒng)缺省值。 下面介紹部分較常用的控件屬性: l Tag 取值為字符串,定義了控件的標識(標簽),在任何程序中都可 以通過這

4、個標識控制該控件對象。 l Style 表明控件對象的類型,取值為表1所列10種當中之一。 l String 定義控件對象的標題或選項內容(即控件上用戶想要顯示的內容),取值為字符 串或數組。 l Units 單位屬性,取值可以是pixels, normalized(歸一化), inches, centimeters或 points。GUI設計時經常使用歸一化單位。 表1:各種控件的外形、特征及應用 l Position 指明控件的位置。其值是4元素向量[left bottom width height], 前2個指明控件左下角在其父對象(一般是圖形窗)左下角的位

5、置,后兩個指明控件的高度和寬度。這些值的單位由Units屬性給出。 l Max 控件的最大值屬性,其值為一標量,不同的控件類型有不同的最大值屬性。默認值是1。對于滑標(滾動條),Max屬性值定義了滑標的最大值;對于彈出式菜單,則定義了最大下標值;對于可編輯文本框,當Max-Min >1 時,可編輯多行文本。 l Min 控件的最小值屬性,其值為一標量,不同的控件類型有不同的最小值屬性。默認值是0。對于滑標,Min屬性值定義了滑標的最小值;對于彈出式菜單,則定義了最小下標值。 l Value 控件的當前值屬性,其值為一標量或向量,取決于控件類型。單選按鈕以及復選框被選中(on

6、態(tài))時,其當前值屬性Value的屬性值應設定為Max屬性的值(即該控件類型的最大值);反之未被選中時(off態(tài),默認),則Value屬性設定為Min的屬性值。對于滑標,其Value屬性值的設置范圍是[Min, Max];對于彈出式菜單,把Value值設置為1時,表示選中第一項,設置2則選中第二項,以此類推,反之,選中第一項,則彈出菜單的value值為1,......;文本對象和功能按鈕無此屬性。 l Callback 回調屬性,其值為字符串,可以是某個M文件名或一小段MATLAB語句,當用戶激活某個控件對象時,應用程序就運行該屬性定義的子程序,使控件產生動作。后面將重點介紹callbac

7、k程序的編寫。 3. 制作用戶控件 用戶控件通過使用命令uicontrol來制作,其使用格式為: H=uicontrol(H_parent,’PN’,PV,…) 其中,H是用戶控件的句柄,H_parent是其父對象句柄。PN,PV為(屬性名,屬性值)二元組,用來定義控件的屬性。 例1:h1=uicontrol(gcf,'style','radio','string','斜體', 'units',... 'normalized','position',[0.6 0.4 0.1 0.05]); % 用uicontrol指令在當前窗口創(chuàng)建一個單選按鈕(radiobutton) set

8、(h1,’Value’,get(h1,’Max’)); % 單選按鈕“斜體”默認為選中狀態(tài) h2=uicontrol(gcf,'style','slider','Max',2.02,'Min',0.02,... 'sliderstep',[0.01 0.05],'value',0.5,'units','normalized',... 'position',[0.6 0.48 0.2 0.05]); % 該語句創(chuàng)建了一個滑標,其中Max和Min屬性的值決定了滑標表示的數值的上下限,即[0.02 2.02]?;瑯说膕liderstep屬性是一個二元數組,第一個元素決定由兩端箭頭操縱滑動時的

9、步長(微調),本例為0.01×(2.02-0.02);第二個元素決定游標操縱滑動時的步長(粗調),本例為0.05×(2.02-0.02)。 h3=uicontrol(gcf,'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、前值;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->0.95)','units','normalized','position',... [0.6 0.25 0.2 0.04]); % 創(chuàng)建2個復選框 程序運行結果

11、如圖所示,若只勾選第一個復選框“最大峰值”,則該控件的當前值value等于最大值Max(=1),第二個復選框的當前值value值則等于最小值Min(=0)。在命令窗口輸入get(h_check1,'value')以及get(h_check2,'value')可以查看到兩個復選框的當前值。 5. 編寫回調函數 設置控件之后,要想讓控件產生動作,完成用戶的意圖就需要合理設置控件的回調屬性(callback),把能完成用戶意圖的一條或幾條Matlab指令以字符串(i.e.加單引號對)的形式設置為callback的屬性值,如例1中: set(h2,'callback',['z=get(gcbo,

12、''value'');','set(h3,''string'',[''當前滑標值='',num2str(z)])']); % 單引號中的雙引號代表單引號 滑標對象h2的callback屬性值(單引號對中的內容)包含下列2條指令 z=get(gcbo,'value'); set(h3,'string',['當前滑標值=',num2str(z)]);% 用[]構成字串矩陣 這兩條指令的目的是把滑標選擇的數值實時地在文本框h3中顯示出來。第一條指令是獲取當前正在執(zhí)行回調動作的對象(即滑標的移動)的當前值value,第二條指令是把該值作為文本框(h3是其句柄)的顯示字串。注意,這里z是數值,把

13、它顯示為字符時,要用num2str函數先轉換成字符型數據。 如果回調屬性有較多條Matlab語句,為了提高效率,一般把它們集中寫成一個函數M文件,稱之為回調函數(callback函數)。其一般格式: 上例中,如果把回調程序寫成M文件,則代碼如下: function callslider(h2,h3) z=get(h2,'value'); set(h3,'string',['當前滑標值=',num2str(z)]); 相應地,callback屬性值應改為回調函數名: set(h2,'callback',’callslider(h2,h3)’); 該指令將調用回調函數,并把滑標

14、句柄h2和文本框句柄h3傳遞給回調函數的輸入參數。 6. GUI開發(fā)環(huán)境(GUI Development Environment, GUIDE) MATLAB提供了一套可視化的創(chuàng)建圖形用戶界面的工具GUIDE,使用GUIDE可方便的創(chuàng)建GUI應用程序,無需用戶編寫繁瑣的控件和菜單的創(chuàng)建程序。它可以根據用戶設計的GUI布局,自動生成M文件的框架,用戶使用這一框架編制自己的應用程序。 打開GUI開發(fā)工具GUIDE的方法:在命令窗口輸入guide,出現下圖所示的對話窗。 點選Blank GUI(Default),再點OK,引出GUI空白界面編輯器,如下圖所示。圖中左側的“對象模

15、板區(qū)”呈現的所有控件和組件的默認外形,若想使控件、組件圖標和其名稱一起顯示,應采用下列步驟設置: l 點擊界面編輯器的菜單項File->Preference,引出GUI選項設置界面; l 勾選“Show names in component palette”項,再點擊OK; 一般來說,在利用界面編輯器設計應用界面之前,應根據任務要求繪制應用界面的草圖,合理地布局各個控件,然后再使用界面編輯器設計、制作自己的GUI界面。 圖:GUI界面編輯器 三、實驗內容及要求 1. 實例練習一 上機練習指導書中例1的程序,初步熟悉控件的制作、控件屬性的設置以及回調函數的編寫。 2. 實例練

16、習二 ——電子波動性MATLAB仿真的界面設計 練習給實驗五設計GUI界面。界面要求如下:① 縫寬a,縫間距b,觀察屏的距離D以及加速電壓U通過界面輸入; ② 可選擇電子數N=200、N=2000、N=20000; ③ 可選擇繪制概率密度的理論分布曲線; ④ 能設置坐標軸背景色和電子顏色。 界面布局(草圖)如圖所示。 其中使用: 1個軸對象 (Axes,用于顯示圖形)、5個靜態(tài)文本框(Static text,注釋用。一個顯示標題,其余四個顯示參數名)、4個編輯框(Edit text,用于輸入參數值)、1個彈出框(Popup menu,提供3種互斥選項)、1個單選按鈕(Ra

17、dio button)、1個單功能按鈕(Push button,用于運行仿真)、2個界面菜單(用于顏色設置)。 繪制好草圖之后,進入GUIDE開發(fā)環(huán)境設計界面。具體步驟如下: ⑴ 開啟GUI界面編輯器 命令窗口輸入guide指令,點選Blank GUI(Default),引出GUI空白界面編輯器。 ⑵ 為界面設計工作區(qū)引入坐標參考系 目的是為了方便在界面上進行控件的布置。方法:點擊界面編輯器菜單Tools?Grid and Rulers,彈出對話框,全部勾選即可(網格的大小可選)。 ⑶ 界面窗屬性設置 l 拖拉界面設計工作區(qū)右下角的小黑方塊句柄,使其長寬調整到希望

18、的大小,它就是未來 應用界面出現時的“默認大小”。 l 雙擊界面編輯器的設計工作區(qū),引出“窗屬性編輯器”(下圖),設置下列屬性值: Resize on % 該設置很重要,它決定未來界面窗是否可縮放 Units normalized % 采用歸一化單位計量窗口大小和位置,縮放時將保持該比例 ⑷ 根據要求進行界面的構建 按照前面的草圖,布置各個控件和組件。 ① “軸”組件的創(chuàng)建 l 在對象模板區(qū),點選“軸(Axes)”圖標到設計工作區(qū)的適當位置; l 用鼠標拉出適當大小的“軸位框”,以供繪制電子的衍射圖形使用; l 雙擊軸位框,引出

19、“屬性編輯器(Property Inspector)”,進行如下屬性設置: Units normalized % 采用相對度量單位,縮放時保持軸與界面之間的比例 NextPlot add % 相當于hold on 功能,以添加的方式繪制多個電子圖形 Box on % 封閉軸位框 XLim [-5e-5 5e-5] % X軸范圍 YLim [-4e-5 4e-5] % Y軸范圍 要注意Tag(標簽)屬性的值,其默認值是Aexs1,可以改。在回調函數中就是通過這個標識名來控制該對象的。另外,通過改變Position

20、屬性的4個值(它們的單位是相對單位,即normalized),還可以精確調整軸位框的位置和大?。ㄏ峦?。 ② 制作顯示大標題的“靜態(tài)文本框”控件 所設計的GUI界面總計有5個靜態(tài)文本框,一個用于顯示大標題,其余四個顯示仿真 參數的名稱。先介紹顯示標題的靜態(tài)文本框的制作,其余的后面介紹。 l 點選對象模板區(qū)的“Static Text”圖標到設計工作區(qū)上端的適當位置,并用鼠標拉出適當的大小(提示:還可以在Position屬性中精確調整其大小)。 l 雙擊靜態(tài)文本框,引出屬性編輯器,設置屬性: Units normalized % 采用相對度量單位,窗縮放時保持與界面之間的比例

21、 String 電子波動性的MATLAB仿真 % 顯示大標題 Tag text1 % 該文本框的標識名,默認值text1,可以改 FontUnits normalized % 采用相對度量單位,窗縮放時保持字體大小比例 FontSize 0.5 % 框內字體的相對大小(框高度為1) FontWeight Bold % 粗體字 ③ 制作“組件盤” 下面引入“組件盤(Panel)”作為仿真的參數區(qū)。在組件盤內集中布置4個顯示仿真參數

22、 名的靜態(tài)文本框和4個輸入參數值的可編輯文本框以及1個彈出框(見草圖)。 l 點選模板區(qū)的“組件盤(Panel)”圖標到軸位框右側的適當位置(參見草圖),并拉出適當的大小以容納8個文本框和1個彈出框。 l 雙擊組件盤,引出屬性編輯器,設置屬性: Units normalized % 采用相對度量單位,縮放時保持與界面之間的比例 Tag uipanel1 % 默認值的標識名,可以改 Title 仿真參數 % 組件盤的標題 TitlePosition centertop % 標題位置

23、 FontSize 9.0 % 框內字體的相對大小(單位points) 順便指出,當字體大小的單位選為normalized時,FontSize總顯示為-1,而無法設置。 ④ 制作4個顯示仿真參數名的“靜態(tài)文本框”控件 l 點選4個對象模板區(qū)的“Static Text”圖標到組件盤的適當位置(參考草圖),并用鼠標拉出適當的大小。 l 雙擊其中第一個靜態(tài)文本框,引出屬性編輯器,設置屬性: Units normalized % 采用相對度量單位,縮放時保持與界面之間的比例 String a(nm) % 縫寬a

24、,單位nm Tag text2 % 該文本框的標識名,默認值text2,可以改 FontUnits normalized % 采用相對度量單位,縮放時保持字體大小比例 FontSize 0.6 % 框內字體的相對大小(框高度為1) l 仿照上述方法,依次設置其余3個靜態(tài)文本框的屬性。 ⑤ 制作4個用于輸入相應參數值的“可編輯文本框(Edit Text)” l 點選4個對象模板區(qū)的“Edit Text”圖標到組件盤的適當位置(注意與相應參數對應,參考草圖),并用鼠標拉

25、出適當的大小。 l 雙擊其中第一個文本框(用于輸入參數a的值),引出屬性編輯器,設置屬性: Units normalized % 采用相對度量單位,縮放時保持與界面之間的比例 String 200 % 縫寬a為200nm Tag edit1 % 該文本框的標識名,默認值edit1,可以改 FontUnits normalized % 采用相對度量單位,縮放時保持字體大小比例 FontSize 0.5 % 框內字體的相對大小(框高度為1)

26、 l 仿照上述方法,依次設置其余3個編輯文本框的屬性,各參數初始值:縫間距b=1mm,加速電壓U=1000V,觀察屏距離D=0.25m。 ⑥ 制作“彈出框(Pop-up Menu)” l 點選對象模板區(qū)的“Pop-up Menu”圖標到組件盤的適當位置(參考草圖),并用鼠標拉出適當的大小。 l 雙擊彈出框,引出屬性編輯器,設置屬性: Units normalized % 采用相對度量單位,縮放時保持與界面之間的比例 String N=2000 N=200 N=20000 % 三種可供選擇的電子數目,注意要寫成3行的形式

27、 Tag popupmenu1 % 該文本框默認的標識名,可以改 FontUnits normalized % 采用相對度量單位,縮放時保持字體大小比例 FontSize 0.6 % 框內字體的相對大小(框高度為1) Value 1.0 % 彈出框的當前值屬性的默認值,=1 默認選第一項,=2 選第二項,=3 第三項 至此,組件盤內的快件都已制作完畢。如果拖動組件盤,則組件盤內所有的控件都將隨之移動。注意,“先有組件盤,然后把控件放置在組件盤”的次序不能顛倒

28、,否則各組件不會隨之移動。 ⑥ 制作“按鈕組(Button Group)” 草圖中有2個按鈕:單選按鈕(radio button)和單功能按鈕(push button)。類似于上面組件盤的引入,這里引入按鈕組,將這2個按鈕統(tǒng)統(tǒng)放置其中。這樣整個界面顯得干凈,整齊。 l 點選模板區(qū)的“按鈕組(Button Group)”圖標到組件盤下方的適當位置(參見草圖),并拉出適當的大小以容納至少2個按鈕。 l 雙擊Button Group,引出屬性編輯器,設置屬性: Units normalized % 采用相對度量單位,縮放時保持與界面之間的比例 Ta

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

30、 % 默認標識名 FontUnits normalized % 采用相對度量單位,縮放時保持字體大小比例 FontSize 0.55 % 框內字體的相對大小(按鈕高度為1) Value 0 % 單選按鈕當前值屬性的默認值,=0 默認不選,=1 默認選取 ⑧ 制作“單功能按鈕(Push Button)” l 點選模板區(qū)的“單功能按鈕(Push Button)”圖標到按鈕組中的適當位置(參見草圖),并拉出適當的大小。 l 雙擊單功能按鈕,引出屬性編輯器,設置屬性:

31、 Units normalized % 采用相對度量單位,縮放時保持與界面之間的比例 String 運行仿真 % 注釋字串 Tag pushbutton1 % 默認標識名 FontUnits normalized % 采用相對度量單位,縮放時保持字體大小比例 FontSize 0.5 % 框內字體的相對大小(按鈕高度為1) ⑨ 制作界面菜單 l 點擊GUI界面編輯器的菜單Tools?Menu Editor引入菜單編輯器,如下圖所示。 l

32、點擊菜單編輯器界面上的“New Menu”圖標后,在編輯器的“Menu Bar”頁左側的菜單結構框里就出現未命名的菜單“Untitled1”。 l 點擊未命名菜單“Untitled1”,在編輯器右側的“菜單屬性(UIMenu Properties)”欄里,就會出現需要填寫的若干屬性條目。 l 填寫或者勾選屬性條目如下: Label 背景顏色 % 菜單名 Tag Menu1 % 菜單的標識,回調函數中通過該標識名控制該菜單 Enable this item 勾選 %

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

34、2個子菜單:“紅色”和“白色”子菜單。菜單屬性分別設置如下: Label 電子顏色 % 頂層菜單名 Tag Menu2 % 頂層菜單的標識 Label 紅色 % 第一個子菜單名 Tag Menu21 % 第一個子菜單的標識 Label 白色 % 第二個子菜單名 Tag Menu22 % 第二個子菜單的標識 制作后的菜單結構如圖所示。 至此,本題的GUI界面制作完畢。保存界面之后(文件名Electron

35、sWave_GUI),系統(tǒng)會生成2個文件,一個是.fig文件,用于保存界面的制作代碼;另一個是.m文件,用于編寫回調函數。點擊界面編輯器上的圖標運行GUI界面,將出現草圖所示的效果。 但是,目前的應用界面還只是“靜態(tài)”的界面,無法“動”起來。要想使得各個控件能執(zhí)行用戶的意圖,必須編寫回調函數(callback函數)。在系統(tǒng)生成的m文件中,包含有界面上各個控件的回調函數的模板,找到各個控件的回調函數,在其中做相應的更改即可。要正確編寫回調函數,首先要了解GUIDE自動生成的ElectronWave_GUI.m文件的結構。 ⑸ GUIDE自動生成的M文件的結構 點擊界面編輯器上的圖標,可以打

36、開ElectronWave_GUI .m文件。該M文件是一個主函數,內含若干個回調子函數,具體結構和相關說明如下: l 主函數 function varargout = ElectronsWave_GUI(varargin) l 子函數 u 界面啟動子函數和輸出子函數 function ElectronsWave_GUI_OpeningFcn(hObject, eventdata, handles, varargin) function varargout = ElectronsWave_GUI_OutputFcn(hObject, eventdata, handle

37、s) u 編輯框回調子函數組(4個) function edit1_Callback(hObject, eventdata, handles) function edit2_Callback(hObject, eventdata, handles) function edit3_Callback(hObject, eventdata, handles) function edit4_Callback(hObject, eventdata, handles) u 彈出框回調子函數 function popupmenu1_Callback(hObject, eventdat

38、a, handles) u 單功能按鈕回調子函數 function pushbutton1_Callback(hObject, eventdata, handles) u 單選按鈕回調子函數 function radiobutton1_Callback(hObject, eventdata, handles) u 界面菜單回調子函數組(6個,上面3個設置背景色,下面3個設置電子顏色) function Menu1_Callback(hObject, eventdata, handles) function Mneu11_Callback(hObject, eventdat

39、a, handles) function Menu12_Callback(hObject, eventdata, handles) function Menu2_Callback(hObject, eventdata, handles) function Menu21_Callback(hObject, eventdata, handles) function Menu22_Callback(hObject, eventdata, handles) 應該指出,上述函數結構具有典型性: ① 每個由GUIDE自動生成的M文件都包含主函數、界面啟動函數(OpeningFcn)和輸

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

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

42、,該控件的句柄值就保存在該結構體的一個域中:handles.mytext(域名就是該控件的Tag屬性值)。通過該控件的句柄,我們就可以索取該控件所有的信息同時也可以更改該控件的屬性。例如,利用 get(handles.mytext,’string’) 可以獲取標識名為‘mytext’的靜態(tài)文本框的字串屬性的當前值。利用 set(handles.mytext,’string’,’屬性值’); guidata(hObject,handles); 可以更改其string屬性值。注意:無論何時,只要是更新了結構體handles,就必須及時地使用guidata指令保存這

43、種更新,否則更新是無效的!guidata指令的使用格式固定為上述形式。 另外,還可以給結構體handles開辟新的域,用來保存用戶的數據,比如在本例中 handles.a=str2num(get(handles.edit1,‘string’)); guidata(hObject,handles) 首先獲取Tag屬性值為edit1的可編輯文本框的輸入字串(即參數a的值,注意鍵盤輸入的其實是字符型數據),然后轉換成數值型數據,即參數a的值200,最后把它存放在結構體handles一個新的域a中。所以handles.a的內容就是200。注意結構體handles更新后要及時用

44、guidata保存。 最后指出,結構體handles中的數據可以在所有子函數中共享。比如在任意一個子函數體內,指令get(handles.mytext,’string’)都可以獲取標識名是mytext的控件的string屬性值。再如,在任意子函數內,指令handles.a都可以提取保存在域名a中的用戶數據。 ⑹ 編寫回調函數 這是最后一步工作。本例GUI界面的設計意圖是:首先設置好背景色和電子的顯示色,然后輸入各種仿真參數以及點選各個選項,最后運行仿真。因此只需編寫兩種回調函數:“設置顏色”的回調函數和“運行仿真”的回調函數。在前者中完成相應色彩的設置,在后者中首先要獲取各個文

45、本框輸入的參數和各種選項,然后再繪制相應的電子衍射圖形。 ① 對設置背景色的菜單編寫回調函數 本例設置了黑色和白色兩種背景,相應子菜單的標識名(即Tag屬性值)分別為Menu11和Menu12(可在菜單編輯器Menu Editor中查看)。打開ElectronWave_GUI .m文件,找到設置黑色背景的子菜單的回調函數Menu11_Callback,在該函數體內空白處添上下列指令: set(handles.axes1,'color','k') % 設置標識名為axes1的軸對象(界面左側坐標軸)的顏色屬性為黑色 當鼠標點擊界面上的黑色菜單時,系統(tǒng)就會執(zhí)行和該菜單聯系的回調函數Men

46、u11_Callback,也即執(zhí)行上面的set指令,使得軸位框背景為黑色。 類似地,找到設置白色背景的子菜單的回調函數Menu12_Callback,在該函數體內空白處添上下列指令即可: set(handles.axes1,'color','w') ② 對設置電子顯示色的菜單編寫回調函數 本例設置了紅色和白色兩種電子顯示色,相應子菜單的標識名(即Tag屬性值)分別為Menu21和Menu22(可在菜單編輯器Menu Editor中查看)。在ElectronWave_GUI .m文件,找到設置紅色的子菜單的回調函數Menu21_Callback,在該函數體內空白處添上下列指令:

47、 handles.ElectronsColor='r'; guidata(hObject,handles); 第一句給結構體handles創(chuàng)建了一個新的域ElectronsColor,用來存放電子的顯示色(字符型數據,此處是紅色‘r‘);第二句是保存更新(必須)!在下面編寫“運行仿真”按鈕的回調函數時,將調用域ElectronsColor中的內容,作為繪制電子圖形時的顯示色。 類似地,找到設置白色的子菜單的回調函數Menu22_Callback,在該函數體內空白處添上下列指令: handles.ElectronsColor='w'; guidata(hObject,ha

48、ndles); ③ 編寫“運行仿真”按鈕的回調函數 在ElectronWave_GUI .m文件中,找到和該按鈕聯系的回調函數pushbutton1_Callback,或者右鍵點擊界面上的“運行仿真”按鈕,在彈出的菜單中點選View Callbacks?Callback,可以快速切換到回調函數pushbutton1_Callback。編寫該回調函數時,首先要獲取各個文本框輸入的參數和各種控制選項,然后再繪制相應的電子衍射圖形。在該回調函數的空白處輸入下列代碼: % 獲取各個編輯文本框輸入的參數 a=1e-9*str2num(get(handles.edit1,'string'));

49、b=1e-6*str2num(get(handles.edit2,'string')); U=str2num(get(handles.edit3,'string')); D=str2num(get(handles.edit4,'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 1 N=2000

50、; case 2 N=200; case 3 N=20000; otherwise end % 是否選擇繪制概率密度理論曲線 if get(handles.radiobutton1,'value')==1 % 選中 figure; % 創(chuàng)建新圖形窗,并將其裂為2個子窗口,以便對照2個結果圖 subplot(2,1,2) % 在該子窗口中繪制概率密度理論曲線 axis([-5e-5 5e-5 -4e-5 4e-5]); %設置坐標軸范圍 x=-5e-5:1e-7:5e-5;

51、 Pw=((sin(A*x)).^2+eps)./((A*x).^2+eps).*(cos(B*x)).^2; plot(x,Pw) title('電子雙縫衍射概率密度理論分布曲線’,'fontsize',10,... 'color','k'); xlabel('x','fontsize',10); ylabel('y','fontsize',10); subplot(2,1,1) % 在該子窗口中繪制衍射圖形 axis([-5e-5 5e-5 -4e-5 4e-5]); xlabel('x'

52、,'fontsize',10); ylabel('y','fontsize',10); title('電子雙縫衍射動態(tài)隨機過程的仿真’,'fontsize',10,... 'color','k'); hold on else % 未選中,只需在界面左側的坐標軸內繪制衍射圖形 cla % 清除當前坐標軸的內容,以便顯示新的結果 xlabel('x','fontsize',10); ylabel('y','fontsize',10); title('電子雙縫衍射動態(tài)隨機過程的仿真'fonts

53、ize',10,... 'color','k'); end for i=1:N x=5e-5*(2*rand-1); y=4e-5*(2*rand-1); %隨機產生觀察點的橫、縱坐標 Pw=(sin(A*x))^2/(A*x)^2*(cos(B*x))^2; % 電子在觀察點(x,y)出現的(相對)概率 M=rand; if Pw>=M h_dot=plot(x,y,'.','markersize',10); % 在隨機的落點位置(x,y)處可視化電子 set(h_dot,'

54、color',handles.ElectronsColor); % 設置電子顯示色 if N==200 pause(0.5); % 延遲0.5秒,以便實時觀察動態(tài)隨機過程 end end end 保存編寫好回調函數。至此,本例的界面設計工作全部完成。注意,運行仿真前,須先設置好背景色和電子顯示色,否則出錯!下圖是界面的運行結果,該界面是可以縮放的。 3. 獨立設計牛頓環(huán)實驗的MATLAB仿真界面 要求如下:① 界面輸入牛頓環(huán)半徑和波長參數,其中波長通過滑標輸入,并且要將滑標的值顯示出來(可參考例1)

55、。 ② 能提供3個選項:空氣薄膜厚度固定、連續(xù)增加薄膜厚度、連續(xù)減小薄膜厚度;其中前一種用于實現靜態(tài)仿真,后兩種實現動態(tài)仿真。③ 靜態(tài)仿真和動態(tài)仿真可選。④ 界面整潔,美觀,富有個性。 根據上述要求,先繪制草圖,列出控件清單,然后再制作有自己風格的GUI界面,編寫相應的回調函數(允許使用實驗三的程序代碼)。 另外,下面的2幅照片是牛頓環(huán)實驗的實際裝置圖和結果圖,僅供大家選用(例如可以用作主界面),不做硬性要求。注意使用時,先要把它們復制到Matlab平臺下的工作目錄中,然后在界面啟動函數(OpeningFcn)中使用imshow(‘文件名’)指令把它們顯示在軸位框里。

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

相關資源

更多
正為您匹配相似的精品文檔
關于我們 - 網站聲明 - 網站地圖 - 資源地圖 - 友情鏈接 - 網站客服 - 聯系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網版權所有   聯系電話:18123376007

備案號:ICP2024067431-1 川公網安備51140202000466號


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對上載內容本身不做任何修改或編輯。若文檔所含內容侵犯了您的版權或隱私,請立即通知裝配圖網,我們立即給予刪除!