收藏 分享(赏)

实验八 图形用户界面设计.doc

上传人:scg750829 文档编号:7139653 上传时间:2019-05-07 格式:DOC 页数:18 大小:2.68MB
下载 相关 举报
实验八  图形用户界面设计.doc_第1页
第1页 / 共18页
实验八  图形用户界面设计.doc_第2页
第2页 / 共18页
实验八  图形用户界面设计.doc_第3页
第3页 / 共18页
实验八  图形用户界面设计.doc_第4页
第4页 / 共18页
实验八  图形用户界面设计.doc_第5页
第5页 / 共18页
点击查看更多>>
资源描述

1、实验八 图形用户界面(GUI)设计(说明:本次实验在 4 学时内独立完成)一、实验目的1. 熟悉各种控件和界面菜单的制作。2. 学会编写控件对象的回调程序(callback 函数) 。3. 熟练使用 GUI 开发工具 GUIDE 设计用户界面。二、实验预备知识图形用户界面(Graphical User Interface,简称 GUI) 是指由窗口、光标、按键、菜单、文字说明等对象构成的一个人与计算机的交互界面。用户通过一定的方法(如鼠标或键盘)选择、激活这些图形对象,使计算机产生某种动作或变化,比如实现计算、绘图等。GUI的最重要组成是用户菜单(uimenu)和用户控件(uicontrol)

2、。关于界面菜单,可以参考课件相关部分的介绍,这里主要介绍控件的类型、属性和制作方法。1. 用户控件的类型控件是事件响应的图形对象。当某一事件发生时,应用程序会做出响应并执行某些预定的功能子程序(即回调函数 Callback) 。MATLAB 中有 10 种不同类型的控件(下图):单功能按钮(Push Button) ; 单选按钮(Radio Button) ;双位按钮(Toggle Button);复选框(Check Box);列表框(List Box);弹出框(Popup Menu);静态文本框(Static Text); 可编辑文本框(Edit Text);滑标或滚动条(Slider);框

3、架(Frame)。这些控件大致可分为两种,一种为动作控件,鼠标点击这些控件时会产生相应的响应;一种为静态控件,是不产生响应的控件,如静态文本框等。表 1 给出了各种控件的描述。2. 用户控件的属性每种控件都有一些可以设置的属性参数,用于表现控件的外形、功能及效果。属性由两部分组成:属性名和属性值,它们必须是 成对出现的。用户可以在创建控件对象时,设定其属性值,未指定时将使用系统缺省值。 下面介绍部分较常用的控件属性: Tag 取值为字符串,定义了控件的标识(标签),在任何程序中都可 以通过这个标识控制该控件对象。 Style 表明控件对象的类型,取值为表 1 所列 10 种当中之一。 Stri

4、ng 定义控件对象的标题或选项内容(即控件上用户想要显示的内容) ,取值为字符串或数组。 Units 单位属性,取值可以是 pixels, normalized(归一化), inches, centimeters或 points。GUI 设计时经常使用归一化单位。表 1:各种控件的外形、特征及应用 Position 指明控件的位置。其值是 4 元素向量left bottom width height, 前 2 个指明控件左下角在其父对象( 一般是图形窗 )左下角的位置,后两个指明控件的高度和宽度。这些值的单位由 Units 属性给出。 Max 控件的最大值属性,其值为一标量,不同的控件类型有不

5、同的最大值属性。默认值是 1。对于滑标(滚动条),Max 属性值定义了滑标的最大值;对于弹出式菜单,则定义了最大下标值;对于可编辑文本框,当 MaxMin 1 时,可编辑多行文本。 Min 控件的最小值属性,其值为一标量,不同的控件类型有不同的最小值属性。默认值是 0。对于滑标,Min 属性值定义了滑标的最小值;对于弹出式菜单,则定义了最小下标值。 Value 控件的当前值属性,其值为一标量或向量,取决于控件类型。单选按钮以及复选框被选中(on 态)时,其当前值属性 Value 的属性值应设定为 Max 属性的值(即该控件类型的最大值) ;反之未被选中时(off 态,默认) ,则 Value

6、属性设定为Min 的属性值。对于滑标,其 Value 属性值的设置范围是Min, Max ;对于弹出式菜单,把 Value 值设置为 1 时,表示选中第一项,设置 2 则选中第二项,以此类推,反之,选中第一项,则弹出菜单的 value 值为 1,;文本对象和功能按钮无此属性。 Callback 回调属性,其值为字符串,可以是某个 M 文件名或一小段 MATLAB 语句,当用户激活某个控件对象时,应用程序就运行该属性定义的子程序,使控件产生动作。后面将重点介绍 callback 程序的编写。3. 制作用户控件用户控件通过使用命令 uicontrol 来制作,其使用格式为:H=uicontrol(

7、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 指令在当前窗口创建一个单选按钮 (radiobutton)set(h1,Value,get(h1,Max); % 单选按钮“斜体”默认为选中状态h2=uicontrol(gcf,style,slider,Max,2.02,Min,0.0

8、2,.sliderstep,0.01 0.05,value,0.5,units,normalized,.position,0.6 0.48 0.2 0.05);% 该语句创建了一个滑标,其中 Max 和 Min 属性的值决定了滑标表示的数值的上下限,即0.02 2.02。滑标的 sliderstep 属性是一个二元数组,第一个元素决定由两端箭头操纵滑动时的步长(微调),本例为 0.01(2.020.02);第二个元素决定游标操纵滑动时的步长(粗调),本例为 0.05(2.020.02)。h3=uicontrol(gcf,style,text,string,当前滑标值=0.5,.units,no

9、rmalized,position,0.6 0.55 0.2 0.04); %创建文本框set(h2,callback,z=get(gcbo,value);,set(h3,string,当前滑标值=,num2str(z); % 在文本框显示滑标当前值;gcbo 返回当前正在执行回调动作的对象(此处是 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,上升

10、时间(0-0.95),units,normalized,position,.0.6 0.25 0.2 0.04); % 创建 2 个复选框程序运行结果如图所示,若只勾选第一个复选框“最大峰值” ,则该控件的当前值 value 等于最大值 Max(=1),第二个复选框的当前值value 值则等于最小值 Min(=0)。在命令窗口输入get(h_check1,value)以及 get(h_check2,value)可以查看到两个复选框的当前值。5. 编写回调函数设置控件之后,要想让控件产生动作,完成用户的意图就需要合理设置控件的回调属性(callback),把能完成用户意图的一条或几条 Matla

11、b 指令以字符串(i.e.加单引号对)的形式设置为 callback 的属性值,如例 1 中:set(h2,callback,z=get(gcbo,value);,set(h3,string,当前滑标值=,num2str(z); % 单引号中的双引号代表单引号滑标对象 h2 的 callback 属性值(单引号对中的内容)包含下列 2 条指令z=get(gcbo,value);set(h3,string,当前滑标值=,num2str(z) ;% 用构成字串矩阵这两条指令的目的是把滑标选择的数值实时地在文本框 h3 中显示出来。第一条指令是获取当前正在执行回调动作的对象(即滑标的移动)的当前值

12、value,第二条指令是把该值作为文本框(h3 是其句柄)的显示字串。注意,这里 z 是数值,把它显示为字符时,要用num2str 函数先转换成字符型数据。如果回调属性有较多条 Matlab 语句,为了提高效率,一般把它们集中写成一个函数M 文件,称之为回调函数(callback 函数) 。其一般格式:上例中,如果把回调程序写成 M 文件,则代码如下:function callslider(h2,h3)z=get(h2,value);set(h3,string,当前滑标值=,num2str(z) ;相应地,callback 属性值应改为回调函数名:set(h2,callback,callsli

13、der(h2,h3);该指令将调用回调函数,并把滑标句柄 h2 和文本框句柄 h3 传递给回调函数的输入参数。6. GUI 开发环境(GUI Development Environment, GUIDE)MATLAB 提供了一套可视化的创建图形用户界面的工具 GUIDE,使用 GUIDE 可方便的创建 GUI 应用程序,无需用户编写繁琐的控件和菜单的创建程序。它可以根据用户设计的 GUI 布局,自动生成 M 文件的框架,用户使用这一框架编制自己的应用程序。打开 GUI 开发工具 GUIDE 的方法:在命令窗口输入 guide,出现下图所示的对话窗。点选 Blank GUI(Default),再

14、点 OK,引出 GUI 空白界面编辑器,如下图所示。图中左侧的“对象模板区”呈现的所有控件和组件的默认外形,若想使控件、组件图标和其名称一起显示,应采用下列步骤设置: 点击界面编辑器的菜单项 File-Preference,引出 GUI 选项设置界面; 勾选“Show names in component palette”项,再点击 OK;一般来说,在利用界面编辑器设计应用界面之前,应根据任务要求绘制应用界面的草图,合理地布局各个控件,然后再使用界面编辑器设计、制作自己的 GUI 界面。图:GUI 界面编辑器三、实验内容及要求1. 实例练习一上机练习指导书中例 1 的程序,初步熟悉控件的制作、

15、控件属性的设置以及回调函数的编写。2. 实例练习二 电子波动性 MATLAB 仿真的界面设计练习给实验五设计GUI 界面。界面要求如下: 缝宽 a,缝间距 b,观察屏的距离 D 以及加速电压U 通过界面输入; 可选择电子数N=200、 N=2000、N=20000; 可选择绘制概率密度的理论分布曲线; 能设置坐标轴背景色和电子颜色。界面布局(草图)如图所示。其中使用: 1 个轴对象 (Axes,用于显示图形)、5 个静态文本框(Static text,注释用。一个显示标题,其余四个显示参数名)、4 个编辑框(Edit text,用于输入参数值)、1 个弹出框(Popup menu,提供 3 种

16、互斥选项)、1 个单选按钮(Radio button)、1 个单功能按钮(Push button,用于运行仿真)、2 个界面菜单(用于颜色设置) 。绘制好草图之后,进入 GUIDE 开发环境设计界面。具体步骤如下: 开启 GUI 界面编辑器命令窗口输入 guide 指令,点选 Blank GUI(Default),引出 GUI 空白界面编辑器。 为界面设计工作区引入坐标参考系目的是为了方便在界面上进行控件的布置。方法:点击界面编辑器菜单 ToolsGrid and Rulers,弹出对话框,全部勾选即可(网格的大小可选) 。 界面窗属性设置 拖拉界面设计工作区右下角的小黑方块句柄,使其长宽调整

17、到希望的大小,它就是未来应用界面出现时的“默认大小” 。 双击界面编辑器的设计工作区,引出“窗属性编辑器” (下图) ,设置下列属性值:Resize on % 该设置很重要,它决定未来界面窗是否可缩放Units normalized % 采用归一化单位计量窗口大小和位置,缩放时将保持该比例 根据要求进行界面的构建按照前面的草图,布置各个控件和组件。 “轴”组件的创建 在对象模板区,点选“轴(Axes)”图标到设计工作区的适当位置; 用鼠标拉出适当大小的“轴位框” ,以供绘制电子的衍射图形使用; 双击轴位框,引出“属性编辑器(Property Inspector)” ,进行如下属性设置:Unit

18、s normalized % 采用相对度量单位,缩放时保持轴与界面之间的比例NextPlot add % 相当于 hold on 功能,以添加的方式绘制多个电子图形Box on % 封闭轴位框XLim -5e-5 5e-5 % X 轴范围YLim -4e-5 4e-5 % Y 轴范围要注意 Tag(标签)属性的值,其默认值是 Aexs1,可以改。在回调函数中就是通过这个标识名来控制该对象的。另外,通过改变 Position 属性的 4 个值(它们的单位是相对单位,即normalized) ,还可以精确调整轴位框的位置和大小(下同) 。 制作显示大标题的“静态文本框”控件所设计的 GUI 界面总

19、计有 5 个静态文本框,一个用于显示大标题,其余四个显示仿真参数的名称。先介绍显示标题的静态文本框的制作,其余的后面介绍。 点选对象模板区的“Static Text”图标到设计工作区上端的适当位置,并用鼠标拉出适当的大小(提示:还可以在 Position 属性中精确调整其大小) 。 双击静态文本框,引出属性编辑器,设置属性:Units normalized % 采用相对度量单位,窗缩放时保持与界面之间的比例String 电子波动性的 MATLAB 仿真 % 显示大标题Tag text1 % 该文本框的标识名,默认值 text1,可以改FontUnits normalized % 采用相对度量单

20、位,窗缩放时保持字体大小比例FontSize 0.5 % 框内字体的相对大小(框高度为 1)FontWeight Bold % 粗体字 制作“组件盘”下面引入“组件盘(Panel)”作为仿真的参数区。在组件盘内集中布置 4 个显示仿真参数名的静态文本框和 4 个输入参数值的可编辑文本框以及 1 个弹出框(见草图) 。 点选模板区的“组件盘(Panel)”图标到轴位框右侧的适当位置(参见草图) ,并拉出适当的大小以容纳 8 个文本框和 1 个弹出框。 双击组件盘,引出属性编辑器,设置属性:Units normalized % 采用相对度量单位,缩放时保持与界面之间的比例Tag uipanel1

21、% 默认值的标识名,可以改Title 仿真参数 % 组件盘的标题TitlePosition centertop % 标题位置FontSize 9.0 % 框内字体的相对大小(单位 points)顺便指出,当字体大小的单位选为 normalized 时,FontSize 总显示为-1,而无法设置。 制作 4 个显示仿真参数名的“静态文本框”控件 点选 4 个对象模板区的“Static Text”图标到组件盘的适当位置( 参考草图),并用鼠标拉出适当的大小。 双击其中第一个静态文本框,引出属性编辑器,设置属性:Units normalized % 采用相对度量单位,缩放时保持与界面之间的比例Str

22、ing a(nm) % 缝宽 a,单位 nmTag text2 % 该文本框的标识名,默认值 text2,可以改FontUnits normalized % 采用相对度量单位,缩放时保持字体大小比例FontSize 0.6 % 框内字体的相对大小(框高度为 1) 仿照上述方法,依次设置其余 3 个静态文本框的属性。 制作 4 个用于输入相应参数值的“可编辑文本框(Edit Text)” 点选 4 个对象模板区的“Edit Text”图标到组件盘的适当位置( 注意与相应参数对应,参考草图),并用鼠标拉出适当的大小。 双击其中第一个文本框(用于输入参数 a 的值) ,引出属性编辑器,设置属性:Un

23、its normalized % 采用相对度量单位,缩放时保持与界面之间的比例String 200 % 缝宽 a 为 200nmTag edit1 % 该文本框的标识名,默认值 edit1,可以改FontUnits normalized % 采用相对度量单位,缩放时保持字体大小比例FontSize 0.5 % 框内字体的相对大小(框高度为 1) 仿照上述方法,依次设置其余 3 个编辑文本框的属性,各参数初始值:缝间距b=1m,加速电压 U=1000V,观察屏距离 D=0.25m。 制作“弹出框(Pop-up Menu)” 点选对象模板区的“Pop-up Menu”图标到组件盘的适当位置( 参考

24、草图),并用鼠标拉出适当的大小。 双击弹出框,引出属性编辑器,设置属性:Units normalized % 采用相对度量单位,缩放时保持与界面之间的比例String N=2000N=200N=20000 % 三种可供选择的电子数目,注意要写成 3 行的形式Tag popupmenu1 % 该文本框默认的标识名,可以改FontUnits normalized % 采用相对度量单位,缩放时保持字体大小比例FontSize 0.6 % 框内字体的相对大小(框高度为 1) Value 1.0 % 弹出框的当前值属性的默认值,=1 默认选第一项,=2 选第二项,=3 第三项至此,组件盘内的快件都已制作

25、完毕。如果拖动组件盘,则组件盘内所有的控件都将随之移动。注意, “先有组件盘,然后把控件放置在组件盘”的次序不能颠倒,否则各组件不会随之移动。 制作“按钮组(Button Group)” 草图中有 2 个按钮:单选按钮(radio button)和单功能按钮 (push button)。类似于上面组件盘的引入,这里引入按钮组,将这 2 个按钮统统放置其中。这样整个界面显得干净,整齐。 点选模板区的“按钮组(Button Group)”图标到组件盘下方的适当位置(参见草图) ,并拉出适当的大小以容纳至少 2 个按钮。 双击 Button Group,引出属性编辑器,设置属性:Units norm

26、alized % 采用相对度量单位,缩放时保持与界面之间的比例Tag uipanel2 % 默认值的标识名,可以改Title % 按钮组的标题为空,也可设置 制作“单选按钮(Radio Button)” 点选模板区的“单选按钮(Radio Button)”图标到按钮组中的适当位置(参见草图) ,并拉出适当的大小。 双击单选按钮,引出属性编辑器,设置属性:Units normalized % 采用相对度量单位,缩放时保持与界面之间的比例String 概率密度理论曲线 % 注释字串Tag radiobutton1 % 默认标识名FontUnits normalized % 采用相对度量单位,缩放时

27、保持字体大小比例FontSize 0.55 % 框内字体的相对大小(按钮高度为 1) Value 0 % 单选按钮当前值属性的默认值,=0 默认不选,=1 默认选取 制作“单功能按钮(Push Button)” 点选模板区的“单功能按钮(Push Button)”图标到按钮组 中的适当位置(参见草图) ,并拉出适当的大小。 双击单功能按钮,引出属性编辑器,设置属性:Units normalized % 采用相对度量单位,缩放时保持与界面之间的比例String 运行仿真 % 注释字串Tag pushbutton1 % 默认标识名FontUnits normalized % 采用相对度量单位,缩放

28、时保持字体大小比例FontSize 0.5 % 框内字体的相对大小(按钮高度为 1) 制作界面菜单 点击 GUI 界面编辑器的菜单 ToolsMenu Editor 引入菜单编辑器,如下图所示。 点击菜单编辑器界面上的“New Menu”图标 后,在编辑器的“Menu Bar”页左侧的菜单结构框里就出现未命名的菜单“Untitled1” 。 点击未命名菜单“Untitled1” ,在编辑器右侧的“菜单属性(UIMenu Properties) ”栏里,就会出现需要填写的若干属性条目。 填写或者勾选属性条目如下:Label 背景颜色 % 菜单名Tag Menu1 % 菜单的标识,回调函数中通过该

29、标识名控制该菜单Enable this item 勾选 % 使该菜单可操作 再给“背景颜色”菜单创建 2 个子菜单:“黑色”和“白色”子菜单。点击菜单编辑器的 工具图标,就会在菜单结构框的“背景颜色”菜单下衍生出一个未命名的子菜单“Untitled2” 。在该子菜单的属性栏中设置:Label 黑色 % 子菜单名Tag Menu11 % 子菜单的标识类似地,创建第二个子菜单“白色”菜单,其属性Label 白色 % 子菜单名Tag Menu12 % 子菜单的标识 仿照上述方法,再创建一个名为“电子颜色”的顶层菜单,其下包含 2 个子菜单:“红色”和“白色”子菜单。菜单属性分别设置如下:Label

30、电子颜色 % 顶层菜单名Tag Menu2 % 顶层菜单的标识Label 红色 % 第一个子菜单名Tag Menu21 % 第一个子菜单的标识Label 白色 % 第二个子菜单名Tag Menu22 % 第二个子菜单的标识制作后的菜单结构如图所示。至此,本题的 GUI 界面制作完毕。保存界面之后(文件名 ElectronsWave_GUI) ,系统会生成 2 个文件,一个是.fig 文件,用于保存界面的制作代码;另一个是.m 文件,用于编写回调函数。点击界面编辑器上的 图标运行 GUI 界面,将出现草图所示的效果。但是,目前的应用界面还只是“静态”的界面,无法“动”起来。要想使得各个控件能执行

31、用户的意图,必须编写回调函数(callback 函数) 。在系统生成的 m 文件中,包含有界面上各个控件的回调函数的模板,找到各个控件的回调函数,在其中做相应的更改即可。要正确编写回调函数,首先要了解 GUIDE 自动生成的 ElectronWave_GUI.m 文件的结构。 GUIDE 自动生成的 M 文件的结构点击界面编辑器上的 图标,可以打开 ElectronWave_GUI .m 文件。该 M 文件是一个主函数,内含若干个回调子函数,具体结构和相关说明如下: 主函数function varargout = ElectronsWave_GUI(varargin) 子函数 界面启动子函数和

32、输出子函数function ElectronsWave_GUI_OpeningFcn(hObject, eventdata, handles, varargin)function varargout = ElectronsWave_GUI_OutputFcn(hObject, eventdata, handles) 编辑框回调子函数组(4 个 )function edit1_Callback(hObject, eventdata, handles)function edit2_Callback(hObject, eventdata, handles)function edit3_Callbac

33、k(hObject, eventdata, handles)function edit4_Callback(hObject, eventdata, handles) 弹出框回调子函数function popupmenu1_Callback(hObject, eventdata, handles) 单功能按钮回调子函数function pushbutton1_Callback(hObject, eventdata, handles) 单选按钮回调子函数function radiobutton1_Callback(hObject, eventdata, handles) 界面菜单回调子函数组(6

34、个,上面 3 个设置背景色,下面 3 个设置电子颜色)function Menu1_Callback(hObject, eventdata, handles)function Mneu11_Callback(hObject, eventdata, handles)function Menu12_Callback(hObject, eventdata, handles)function Menu2_Callback(hObject, eventdata, handles)function Menu21_Callback(hObject, eventdata, handles)function M

35、enu22_Callback(hObject, eventdata, handles)应该指出,上述函数结构具有典型性: 每个由 GUIDE 自动生成的 M 文件都包含主函数、界面启动函数(OpeningFcn)和输出子函数。而且子函数名的构成形式也都一样,即由“用户输入的保存文件名”加固定的 OpeningFcn 或 OutputFcn 字节构成。启动函数的执行时间发生在 GUI 所有组件创建之后(即 CreateFcn 运行之后) ,但在将它们显示在屏幕之间,其任务是为 GUI 的使用准备数据和界面形态(即初始化) ,限于篇幅,这里不介绍启动函数的编写。 回调子函数与用户界面上的控件相对应

36、,而且函数的命名有个特点,就是对应控件的标识名(即 Tag 属性值)加上固定的 Callback 字节。比如本例中,有 2 个按钮 radio button 和 push button,和它们对应的回调函数有分别是:radiobutton1_Callback 和pushbutton1_Callback。 回调子函数体内,需要用户自己编写代码,以实现该控件被触发后,产生相应操作,完成用户意图。 所有子函数都有 3 个相同的参数:hObject,eventdata , handles。参数意义说明如下: hObject 代表正在执行回调的控件的句柄或者说和该子函数对应的控件的句柄。 eventda

37、ta 保留参数,供以后版本升级使用。 handles 结构体。GUI 的控件、界面菜单、Axes 等图形对象的句柄以及用户数据就保存在该结构体中,以实现数据的共享。例如当建立一个标识Tag=mytext的静态文本框时,该控件的句柄值就保存在该结构体的一个域中:handles.mytext(域名就是该控件的 Tag 属性值) 。通过该控件的句柄,我们就可以索取该控件所有的信息同时也可以更改该控件的属性。例如,利用 get(handles.mytext,string) 可以获取标识名为mytext的静态文本框的字串属性的当前值。利用set(handles.mytext,string, 属性值);g

38、uidata(hObject,handles);可以更改其 string 属性值。注意:无论何时,只要是更新了结构体 handles,就必须及时地使用 guidata 指令保存这种更新,否则更新是无效的!guidata 指令的使用格式固定为上述形式。另外,还可以给结构体 handles 开辟新的域,用来保存用户的数据,比如在本例中handles.a=str2num(get(handles.edit1, string); guidata(hObject,handles)首先获取 Tag 属性值为 edit1 的可编辑文本框的输入字串 (即参数 a 的值,注意键盘输入的其实是字符型数据),然后转换

39、成数值型数据,即参数 a 的值 200,最后把它存放在结构体 handles 一个新的域 a 中。所以 handles.a 的内容就是 200。注意结构体handles 更新后要及时用 guidata 保存。最后指出,结构体 handles 中的数据可以在所有子函数中共享。比如在任意一个子函数体内,指令 get(handles.mytext,string)都可以获取标识名是 mytext 的控件的 string 属性值。再如,在任意子函数内,指令 handles.a 都可以提取保存在域名a 中的用户数据。 编写回调函数这是最后一步工作。本例 GUI 界面的设计意图是:首先设置好背景色和电子的显

40、示色,然后输入各种仿真参数以及点选各个选项,最后运行仿真。因此只需编写两种回调函数:“设置颜色”的回调函数和“运行仿真”的回调函数。在前者中完成相应色彩的设置,在后者中首先要获取各个文本框输入的参数和各种选项,然后再绘制相应的电子衍射图形。 对设置背景色的菜单编写回调函数本例设置了黑色和白色两种背景,相应子菜单的标识名(即 Tag 属性值) 分别为 Menu11和 Menu12(可在菜单编辑器 Menu Editor 中查看) 。打开 ElectronWave_GUI .m 文件,找到设置黑色背景的子菜单的回调函数 Menu11_Callback,在该函数体内空白处添上下列指令:set(han

41、dles.axes1,color,k) % 设置标识名为 axes1 的轴对象(界面左侧坐标轴)的颜色属性为黑色当鼠标点击界面上的黑色菜单时,系统就会执行和该菜单联系的回调函数Menu11_Callback,也即执行上面的 set 指令,使得轴位框背景为黑色。类似地,找到设置白色背景的子菜单的回调函数 Menu12_Callback,在该函数体内空白处添上下列指令即可:set(handles.axes1,color,w) 对设置电子显示色的菜单编写回调函数本例设置了红色和白色两种电子显示色,相应子菜单的标识名(即 Tag 属性值) 分别为Menu21 和 Menu22(可在菜单编辑器 Menu

42、 Editor 中查看) 。在 ElectronWave_GUI .m 文件,找到设置红色的子菜单的回调函数 Menu21_Callback,在该函数体内空白处添上下列指令:handles.ElectronsColor=r; guidata(hObject,handles);第一句给结构体 handles 创建了一个新的域 ElectronsColor,用来存放电子的显示色(字符型数据,此处是红色r);第二句是保存更新(必须)!在下面编写“运行仿真”按钮的回调函数时,将调用域 ElectronsColor 中的内容,作为绘制电子图形时的显示色。类似地,找到设置白色的子菜单的回调函数 Menu2

43、2_Callback,在该函数体内空白处添上下列指令:handles.ElectronsColor=w; guidata(hObject,handles); 编写“运行仿真”按钮的回调函数在 ElectronWave_GUI .m 文件中,找到和该按钮联系的回调函数pushbutton1_Callback,或者右键点击界面上的 “运行仿真 ”按钮,在弹出的菜单中点选View CallbacksCallback,可以快速切换到回调函数 pushbutton1_Callback。编写该回调函数时,首先要获取各个文本框输入的参数和各种控制选项,然后再绘制相应的电子衍射图形。在该回调函数的空白处输入下

44、列代码:% 获取各个编辑文本框输入的参数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.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) % 获取弹出

45、框中的选项case 1N=2000;case 2N=200;case 3N=20000;otherwiseend% 是否选择绘制概率密度理论曲线if get(handles.radiobutton1,value)=1 % 选中figure; % 创建新图形窗,并将其裂为 2 个子窗口,以便对照 2 个结果图subplot(2,1,2) % 在该子窗口中绘制概率密度理论曲线axis(-5e-5 5e-5 -4e-5 4e-5); %设置坐标轴范围x=-5e-5:1e-7:5e-5;Pw=(sin(A*x).2+eps)./(A*x).2+eps).*(cos(B*x).2;plot(x,Pw)t

46、itle(电子双缝衍射概率密度理论分布曲线,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,fontsize,10);ylabel(y,fontsize,10);title(电子双缝衍射动态随机过程的仿真,fontsize,10,. color,k);hold on else % 未选中,只需在界面左侧的坐标轴内绘制衍射图形cla % 清除当前坐标轴的内容,以便显示新的结果xla

47、bel(x,fontsize,10);ylabel(y,fontsize,10);title(电子双缝衍射动态随机过程的仿真fontsize,10,. color,k);endfor i=1:Nx=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,color,handles.ElectronsColor); % 设置电子显示色if N=200pause(0.5); % 延迟 0.5 秒,以便实时观察动态随机过程endendend保存编写好回调函数。至此,本例的界面设计工作全部完成。注意,运行仿真前,须先设置好背景色和电子显示色,否则出错!下图是界面的运行结果,该界面是可以缩放的。3. 独立设计牛顿环实验的 MATLAB 仿真界面要求如下: 界面输入牛顿环半径和波长参数,其中波长通过滑标输入,并且要将滑标的值显示出来(可参考例 1) 。 能提供 3 个选项:空气薄膜厚度固定、连续增加薄膜厚度、连续减小薄膜厚度;其中前一种

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报