




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、实验八 图形用户界面(GUI)设计(说明:本次实验在4学时内独立完成)一、实验目的1. 熟悉各种控件和界面菜单的制作。2. 学会编写控件对象的回调程序(callback函数)。3. 熟练使用GUI开发工具GUIDE设计用户界面。二、实验预备知识图形用户界面(Graphical User In terface,简称GUI)是指由窗口、光标、按键、菜单、文字说明等对象构成的一个人与计算机的交互界面。用户通过一定的方法(如鼠标或键盘)选择、激活这些图形对象,使计算机产生某种动作或变化,比如实现计算、绘图等。GUI的最重要组成是用户 菜单(uimenu)和用户控件(uicontrol)。关于界面菜单,
2、可以参考课件 相关部分的介绍,这里主要介绍控件的类型、属性和制作方法。1. 用户控件的类型控件是事件响应的图形对象。当某一事件发生时,应用程序会做出响应并执行某些预定的功能子程序 (即回调函数Callback )。MATLAB中有10种不同类型的控件(下图): 单功能按钮(Push Butt on);单选按钮(Radio Butto n);双位按钮(Toggle Butto n);复选框(Check Box):列表框(List Box):弹出框(Popup Menu);静态文本框 (Static Text):可编辑文本框 (Edit Text):滑标或滚动条(Slider);框架(Frame)
3、。Wpusih ButtoinSlider® Radio ButtonS Check Box 断Edit T餉 間 static TextIEPop-up Menu fSUStCOX® Toggle Button这些控件大致可分为两种,一种为动作控件,鼠标点击这些控件时会产生相应的响应;一种为静态控件,是不产生响应的控件,如静态文本框等。表1给出了各种控件的描述。2. 用户控件的属性每种控件都有一些可以设置的属性参数,用于表现控件的外形、功能及效果。属性由两部分组成:属性名和属性值,它们必须是 成对出现的。用户可以在创建控件对象时,设定其属性值,未指定时将使用系统缺省值。下
4、面介绍部分较常用的控件属性:Tag取值为字符串,定义了控件的标识(标签),在任何程序中都可以通过这个标识控制该控件对象。Style 表明控件对象的类型,取值为表1所列10种当中之一。,取值为字符Stri ng 定义控件对象的标题或选项内容(即控件上用户想要显示的内容)串或数组。Un its 单位属性,取值可以是pixels, no rmalized(归一化),i nches, cen timeters或points 。 GUI设计时经常使用归一化单位。表1:各种控件的外形、特征及应用屣值刖腔件名称揑件特征和便用场合fusaburton单功能按钮带有丈字标识的抱形 a选中"«
5、“就开"操作时会引起團廿变化” 单顶功能选择用radiobutuii单逸删带有皇字标识的小圆圈.“歼'或“关卄狀念用小番内的小点盪示 多项派互斥"功能逸择用togzlebnncz带有文字标识的拒珞 护或啜状东用N凸表示,丙状邊切换 选用checkbox复选框帯有文字杯识的水方札 小方枢中有对勾农乐选中*爹项,可互容” 功能迪擇选用EsfoOL列表框帝有垂11轧动茶的长方形文#椒多项41旦容"功概迪孫选用popufmmu弾出框带操纵讎的快方廖文木粮,多顼亠互斥"功能选孫选月slider消杯'丿长方形.标*丙端带滑动期JL可连接步逆衣取歌値e
6、dit可彌文本幅凹形方鵰 可是含法的MATLAB语冠 程序軸入运杭 町随意输入 运行曲令程序text弱蛊文本框凹形方据其中的文字用于注鼾悚用iame在用面上书方槌圈定用户控件所在区域Position指明控件的位置。其值是4元素向量left bottom width height, 前2个指明控件左下角在其父对象(一般是图形窗)左下角的位置,后两个指明控件的高度和宽度。这 些值的单位由Un its属性给出。Max控件的最大值属性,其值为一标量,不同的控件类型有不同的最大值属性。默认值是1。对于滑标(滚动条),Max属性值定义了滑标的最大值;对于弹出式菜单,则 定义了最大下标值;对于可编辑文本框,
7、当Max Min >1时,可编辑多行文本。Min控件的最小值属性,其值为一标量,不同的控件类型有不同的最小值属性。默认值是0。对于滑标,Min属性值定义了滑标的最小值;对于弹出式菜单,则定义了最 小下标值。Value控件的当前值属性,其值为一标量或向量,取决于控件类型。单选按钮以及复选框被选中(on态)时,其当前值属性 Value的属性值应设定为 Max属性的值(即该 控件类型的最大值);反之未被选中时(off态,默认),则Value属性设定为 Min的属 性值。对于滑标,其 Value属性值的设置范围是Min. Max;对于弹出式菜单,把 Value 值设置为1时,表示选中第一项,设置
8、2则选中第二项,以此类推,反之,选中第一项, 则弹出菜单的value值为1,;文本对象和功能按钮无此属性。Callback 回调属性,其值为字符串,可以是某个 M文件名或一小段 MATLAB语句,当 用户激活某个控件对象时, 应用程序就运行该属性定义的子程序,使控件产生动作。 后面将重点介绍callback程序的编写。3. 制作用户控件用户控件通过使用命令uicontrol来制作,其使用格式为:H=uicontrol(H_parent,' PN ,PV,)其中,H是用户控件的句柄,H_parent是其父对象句柄。PN,PV为(属性名,属性值)二元组,用来定义控件的属性。例 1: h仁u
9、icontrol(gcf,'style','radio','string','斜体','units',.'n ormalized','positio n',0.6 0.4 0.1 0.05);%用uicontrol指令在当前窗口创建一个单选按钮(radiobutton)set(h1, 'Value ',get(h1, 'Max ');%单选按钮“斜体”默认为选中状态h2=uico ntrol(gcf,'style','slide
10、r','Max',2.02,'Mi n',0.02,.'sliderstep',0.01 0.05,'value',0.5,'u nits',' normalized',.'positio n',0.6 0.48 0.2 0.05);%该语句创建了一个滑标,其中Max和Min属性的值决定了滑标表示的数值的上下限,即0.02 2.02。滑标的sliderstep属性是一个二元数组,第一个元素决定由两端箭头操纵滑动时的步长(微调),本例为0.0 1 X (2 .0 2-0.02
11、);第二个元素决定游标操纵滑动 时的步长(粗调),本例为0.0 5 X (2 .0 2 0.02 )。h3=uico ntrol(gcf,'style','text','stri ng','当前滑标值=0.5',.'un its',' normalized','positi on ',0.6 0.550.2 0.04);%创建文本框set(h2,'callback','z=get(gcbo,"value");','set(h
12、3,"stri ng'',当前滑标值='',nu m2str(z)');%在文本框显示滑标当前值;gcbo返回当前正在执行回调动作的对象(此处是h2)的句柄h_check1=uic on trol(gcf,'style','checkbox','stri ng',.'最大峰值','units','normalized','position',0.60.320.20.04);h_check2 =uic on trol(gcf,'
13、style','checkbox','stri ng',上升时间(0->0.95)','units','normalized','position',.0.6 0.25 0.2 0.04);%创建2个复选框当前滑标值日3J叼掃大嵯佰匡托国呵®匝同程序运行结果如图所示,若只勾选第一个复选框“最大峰值”,则该控件的当前值value等于最大值 Max(=1),第二个复选框的当前值value值则等于最小值 Min(=0)。在命令窗口输入 get(h_check1,'value'
14、;) 以及get(h_check2,'value')可以查看到两个复选框的当前值。5.编写回调函数设置控件之后,要想让控件产生动作,完成用户的意图就需要合理设置控件的回调属性(callback),把能完成用户意图的一条或几条Matlab指令以字符串(i.e.加单引号对)的形式设置为callback的属性值,如例1中:set(h2,'callback','z=get(gcbo,'' value '' );','set(h3,'' string''”当前滑标值=''
15、;,num2str(z)');%单引号中的双引号代表单引号滑标对象h2的callback 属性值(单引号对中的内容)包含下列2条指令z=get(gcbo,'value');set(h3,'string','当前滑标值=',num2str);%用构成字串矩阵这两条指令的目的是把滑标选择的数值实时地在文本框h3中显示出来。第一条指令是获取当前正在执行回调动作的对象(即滑标的移动)的当前值value,第二条指令是把该值作为文本框(h3是其句柄)的显示字串。注意,这里z是数值,把它显示为字符时, 要用num2str 函数先转换成字符型数据。如果回
16、调属性有较多条Matlab语句,为了提高效率,一般把它们集中写成一个函数M文件,称之为回调函数(callback函数)。其一般格式:function CallbackName (hObject. p1,p2 .)名执ffMMl控件幼桶上例中,如果把回调程序写成 M文件,则代码如下:function callslider(h2,h3)z=get(h2,'value');set(h3,'stri ng','当前滑标值=',nu m2str )相应地,callback属性值应改为回调函数名:set(h2 ,'callback',call
17、slider(h2,h3)'该指令将调用回调函数,并把滑标句柄h2和文本框句柄h3传递给回调函数的输入参数。6. GUI 开发环境(GUI Development Environment, GUIDE)MATLAB 提供了一套可视化的创建图形用户界面的工具GUIDE,使用GUIDE可方便的创建GUI应用程序,无需用户编写繁琐的控件和菜单的创建程序。它可以根据用户设计 的GUI布局,自动生成 M文件的框架,用户使用这一框架编制自己的应用程序。打开GUI开发工具GUIDE的方法:在命令窗口输入guide ,出现下图所示的对话窗。点选Blank GUI(Default) ,再点OK,引出GU
18、I空白界面编辑器,如下图所示。图中左 侧的“对象模板区”呈现的所有控件和组件的默认外形,若想使控件、组件图标和其名称一起显示,应采用下列步骤设置:点击界面编辑器的采单项File->Preference,引出GUI选项设置界面;”项,再点击OK;勾选"Show names in component palette般来说,在利用界面编辑器设计应用界面之前,应根据任务要求绘制应用界面的草GUI界面。討齐菜单编创丈伴编属性编已建控件激潘團工叟 薯工臭、辑工具辑工是埶览工具年工具-InlAtl菜单条图:GUI界面编辑器工作区 编敵句柄File Edi t Vi ew对象模板区0TKTHI
19、.- rl1七计:作E編辑工具集图,合理地布局各个控件,然后再使用界面编辑器设计、制作自己的点击界面编辑器的采单项File->Preference,引出GUI选项设置界面;点击界面编辑器的采单项File->Preference,引出GUI选项设置界面;>电子怯功性苗贞鼎新|_ 口 X三、实验内容及要求1. 实例练习一上机练习指导书中例 1的程序,初步熟悉控件的制作、控件属性的设置以及回调函数的 编写。2. 实例练习二一一电子波动性MATLAB仿真的界面设计练习给实验五设计GUI界面。界面要求如下: 缝宽a,缝间距b,观察屏的距离D以及加速电压U通过界面输入; 可选择电子数N=
20、200、N=2000、 N=20000 ; 可选择绘制概率密度的理论分布曲线; 能设置坐标轴背景色和电子颜色。界面布局(草图)如图所示。其中使用:1个轴对象(Axes,用于显示图形)、5个静态文本框(Static text,注释用。 一个显示标题,其余四个显示参数名)、4个编辑框(Edit text,用于输入参数值)、1个弹出框(Popup menu,提供3种互斥选项)、1个单选按钮(Radio butt on)、1个单功能按钮(Push button, 用于运行仿真)、2个界面菜单(用于颜色设置)。绘制好草图之后,进入GUIDE开发环境设计界面。具体步骤如下:开启GUI界面编辑器命令窗口输入
21、guide 指令,点选Biank GUI(Default),引出GUI空白界面编辑器。为界面设计工作区引入坐标参考系目的是为了方便在界面上进行控件的布置。方法:点击界面编辑器菜单Tools Grid andRulers,弹出对话框,全部勾选即可(网格的大小可选)。界面窗属性设置拖拉界面设计工作区右下角的小黑方块句柄,使其长宽调整到希望的大小,它就是未来应用界面出现时的“默认大小”。双击界面编辑器的设计工作区,引出“窗属性编辑器”(下图),设置下列属性值:Resize on %该设置很重要,它决定未来界面窗是否可缩放Units normalized %采用归一化单位计量窗口大小和位置,缩放时将保
22、持该比例根据要求进行界面的构建按照前面的草图,布置各个控件和组件。“轴”组件的创建在对象模板区,点选“轴(Axes) ”图标到设计工作区的适当位置;用鼠标拉出适当大小的“轴位框”,以供绘制电子的衍射图形使用;双击轴位框,引出“属性编辑器(Property Inspector) ”,进行如下属性设置:Units normalized %采用相对度量单位,缩放时保持轴与界面之间的比例NextPlotadd % 相当于 hold on 功能,以添加的方式绘制多个电子图形Box on%封闭轴位框XLim-5e-5 5e-5% X 轴范围YLim-4e-5 4e-5% Y 轴范围要注意Tag(标签)属性
23、的值,其默认值是 Aexsl,可以改。在回调函数中就是通过这个标识 名来控制该对象的。另外,通过改变 Position 属性的 4 个值(它们的单位是相对单位,即normalized),还可以精确调整轴位框的位置和大小(下同)。 制作显示大标题的“静态文本框”控件所设计的 GUI 界面总计有 5 个静态文本框,一个用于显示大标题,其余四个显示仿真 参数的名称。先介绍显示标题的静态文本框的制作,其余的后面介绍。点选对象模板区的“ Static Text ”图标到设计工作区上端的适当位置,并用鼠标拉出 适当的大小 (提示:还可以在 Position 属性中精确调整其大小 )。双击静态文本框,引出属
24、性编辑器,设置属性:Units normalized % 采用相对度量单位, 窗缩放时保持与界面之间的比例String 电子波动性的MATLAB 仿真% 显示大标题Tag text1%该文本框的标识名,默认值 text1,可以改FontUnits normalized% 采用相对度量单位,窗缩放时保持字体大小比例FontSize 0.5% 框内字体的相对大小 (框高度为 1)FontWeight Bold% 粗体字 制作“组件盘”下面引入“组件盘(Pa nel) ”作为仿真的参数区。在组件盘内集中布置4个显示仿真参数名的静态文本框和 4个输入参数值的可编辑文本框以及 1 个弹出框(见草图) 。
25、点选模板区的“组件盘(Pa nel) ”图标到轴位框右侧的适当位置(参见草图),并拉出适当的大小以容纳 8 个文本框和 1 个弹出框。双击组件盘,引出属性编辑器,设置属性:Units normalized % 采用相对度量单位, 缩放时保持与界面之间的比例Taguipanel1% 默认值的标识名,可以改Title 仿真参数% 组件盘的标题TitlePosition centertop% 标题位置FontSize 9.0% 框内字体的相对大小 (单位 points)顺便指出,当字体大小的单位选为 normalized 时, FontSize 总显示为 -1 ,而无法设置。 制作 4 个显示仿真参
26、数名的“静态文本框”控件点选4个对象模板区的“Static Text”图标到组件盘的适当位置(参考草图),并用鼠 标拉出适当的大小。双击其中第一个静态文本框,引出属性编辑器,设置属性:Unitsnormalized% 采用相对度量单位,缩放时保持与界面之间的比例String a(nm)%缝宽a,单位nmTag text2%该文本框的标识名,默认值 text2,可以改FontUnits normalized % 采用相对度量单位,缩放时保持字体大小比例FontSize 0.6% 框内字体的相对大小 (框高度为 1)仿照上述方法,依次设置其余 3 个静态文本框的属性。 制作 4 个用于输入相应参数
27、值的“可编辑文本框(Edit Text) ”点选 4 个对象模板区的“ Edit Text ”图标到 组件盘 的适当位置 (注意与相应参数对 应,参考草图 ),并用鼠标拉出适当的大小。双击其中第一个文本框(用于输入参数 a 的值),引出属性编辑器,设置属性: Units normalized%采用相对度量单位,缩放时保持与界面之间的比例String 200%缝宽 a 为 200nmTag editl%该文本框的标识名,默认值 editl,可以改FontUnits normalized% 采用相对度量单位,缩放时保持字体大小比例FontSize 0.5% 框内字体的相对大小 (框高度为 1)仿照
28、上述方法,依次设置其余 3 个编辑文本框的属性,各参数初始值:缝间距b=1 m,加速电压 U=1000V,观察屏距离 D=0.25m。 制作“弹出框 (Pop-up Menu) ”点选对象模板区的“ Pop-up Menu”图标到组件盘的适当位置(参考草图),并用鼠 标拉出适当的大小。双击弹出框,引出属性编辑器,设置属性:Units normalized % 采用相对度量单位,缩放时保持与界面之间的比例String N=2000N=200N=20000% 三种可供选择的电子数目, 注意要写成 3 行的形式Tag popupmenu1% 该文本框默认的标识名,可以改FontUnits norma
29、lized% 采用相对度量单位,缩放时保持字体大小比例FontSize 0.6% 框内字体的相对大小 (框高度为 1)Value 1.0% 弹出框的当前值属性的默认值,=1 默认选第一项,=2 选第二项, =3 第三项至此,组件盘内的快件都已制作完毕。如果拖动组件盘,则组件盘内所有的控件都将 随之移动。注意, “先有组件盘,然后把控件放置在组件盘”的次序不能颠倒,否则各组件不会随之移动。 制作“按钮组 (Button Group) ”草图中有2个按钮:单选按钮(radio butt on)和单功能按钮(push butt on)。类似于上面组件盘的引入,这里引入按钮组,将这2个按钮统统放置其中
30、。这样整个界面显得干净,整齐。点选模板区的"按钮组(Button Group) ”图标到组件盘下方的适当位置(参见草图)并拉出适当的大小以容纳至少2个按钮。双击Button Group,引出属性编辑器,设置属性:Units normalized %采用相对度量单位,缩放时保持与界面之间的比例Tag uipa nel2%默认值的标识名,可以改Title%按钮组的标题为空,也可设置 制作“单选按钮(Radio Button) ”点选模板区的"单选按钮 (Radio Button) ”图标到按钮组中的适当位置(参见草图), 并拉出适当的大小。双击单选按钮,引出属性编辑器,设置属性
31、:Units normalized %采用相对度量单位,缩放时保持与界面之间的比例Tag radiobutt on1%默认标识名FontUn itsno rmalized%采用相对度量单位,缩放时保持字体大小比例Fon tSize 0.55%框内字体的相对大小(按钮高度为1)Value0%单选按钮当前值属性的默认值,=0默认不选,=1默认选取Stri ng概率密度理论曲线%注释字串 制作“单功能按钮(Push Butto n) ”点选模板区的"单功能按钮(Push Button) ”图标到按钮组中的适当位置(参见草图),并拉出适当的大小。双击单功能按钮,引出属性编辑器,设置属性:Un
32、 itsno rmalized采用相对度量单位,缩放时保持与界面之间的比例String运行仿真注释字串Tag pushbutt on1默认标识名FontUn itsno rmalized采用相对度量单位,缩放时保持字体大小比例Fon tSize 0.5框内字体的相对大小(按钮高度为1)制作界面菜单点击GUI界面编辑器的菜单Tools Menu Editor引入菜单编辑器,如下图所示。点击菜单编辑器界面上的“New Menu ”图标后,在编辑器的“ Me nu Bar ”页左侧的菜单结构框里就出现未命名的菜单“Un titled1 ”。点击未命名菜单“ Untitled1 ”,在编辑器右侧的“菜
33、单属性(UIMenu Properties) ”栏里,就会出现需要填写的若干属性条目。填写或者勾选属性条目如下:Label背景颜色%菜单名lriu Kdi i orTag Menul%菜单的标识,回调函数中通过该标识名控制该菜单En able this item勾选 % 使该菜单可操作再给“背景颜色”菜单创建2个子菜单:“黑色”和“白色”子菜单。点击菜单编辑器的=工具图标,就会在菜单结构框的“背景颜色”菜单下衍生出一个未命名的子菜单“ Untitled2 ”。在该子菜单的属性栏中设置:Label黑色%子菜单名Tag Me null%子菜单的标识类似地,创建第二个子菜单“白色”菜单,其属性Lab
34、el白色%子菜单名Tag Menu12%子菜单的标识仿照上述方法,再创建一个名为“电子颜色”的顶层菜单,其下包含2个子菜单:“红色”和“白色”子菜单。菜单属性分别设置如下:Label电子颜色%)顶层菜单名TagMenu2%顶层菜单的标识Label红色%第一个子菜单名TagMen u21%第一-个子菜单的标识Label白色%第二个子菜单名TagMenu22%第二个子菜单的标识制作后的菜单结构如图所示。lieiiu Bdi Lcjz口 X至此,本题的GUI界面制作完毕。保存界面之后(文件名 ElectronsWave_GUI ),系统 会生成2个文件,一个是.fig文件,用于保存界面的制作代码;另
35、一个是 .m文件,用于编写 回调函数。点击界面编辑器上的 丨討图标运行GUI界面,将出现草图所示的效果。但是,目前的应用界面还只是“静态”的界面,无法“动”起来。要想使得各个控件能 执行用户的意图,必须编写回调函数(callback函数)。在系统生成的 m文件中,包含有界面上各个控件的回调函数的模板,找到各个控件的回调函数,在其中做相应的更改即可。要正确编写回调函数,首先要了解GUIDE自动生成的ElectronWave_GUI.m文件的结构。GUIDE自动生成的M文件的结构点击界面编辑器上的I層 图标,可以打开 ElectronWave_GUI .m文件。该M文件是一个 主函数,内含若干个回
36、调子函数,具体结构和相关说明如下:主函数function varargout = Electr on sWave_GUI(vararg in)子函数界面启动子函数和输出子函数function ElectronsWave_GUI_OpeningFcn(hObject, eventdata, handles, varargin) fun cti on varargout = Electr on sWave_GUI_OutputFc n( hObject, eve ntdata, han dles) 编辑框回调子函数组(4个)function edit1_Callback(hObject, even
37、 tdata, han dles)function edit2_Callback(hObject, even tdata, han dles)function edit3_Callback(hObject, even tdata, han dles)function edit4_Callback(hObject, even tdata, han dles)弹出框回调子函数function popupmenu1_Callback(hObject, eventdata, handles) 单功能按钮回调子函数function pushbutton1_Callback(hObject, eventd
38、ata, handles) 单选按钮回调子函数function radiobutton1_Callback(hObject, eventdata, handles) 界面菜单回调子函数组 (6 个,上面 3 个设置背景色,下面 3 个设置电子颜色 ) function Menu1_Callback(hObject, eventdata, handles) function Mneu11_Callback(hObject, eventdata, handles) function Menu12_Callback(hObject, eventdata, handles) function Menu
39、2_Callback(hObject, eventdata, handles) function Menu21_Callback(hObject, eventdata, handles) function Menu22_Callback(hObject, eventdata, handles) 应该指出,上述函数结构具有典型性: 每个由 GUIDE 自动生成的 M 文件都包含主函数、界面启动函数(OpeningFcn) 和输出子函数。而且子函数名的构成形式也都一样,即由“用户输入的保存文件名”加固定的 OpeningFcn 或 OutputFcn 字节构成。启动函数的执行时间发生在 GUI 所
40、有组件创建之后 (即 CreateFcn 运行之后 ),但在 将它们显示在屏幕之间,其任务是为 GUI 的使用准备数据和界面形态(即初始化) ,限 于篇幅,这里不介绍启动函数的编写。 回调子函数与用户界面上的控件相对应, 而且函数的命名有个特点, 就是对应控件的标 识名(即Tag属性值)加上固定的Callback字节。比如本例中,有2个按钮radio butt on和push button,和它们对应的回调函数有分别是:radiobutton1_Callback和pushbutton1_Callback 。 回调子函数体内,需要用户自己编写代码,以实现该控件被触发后,产生相应操作,完 成用户意
41、图。 所有子函数都有 3个相同的参数:hObject, eventdata, handles=参数意义说明如下:hObject 代表正在执行回调的控件的句柄或者说和该子函数对应的控件的句柄。 eventdata 保留参数,供以后版本升级使用。handles 结构体。 GUI 的控件、 界面菜单、 Axes 等图形对象的 句柄以及用户数据 就保存在该结构体中,以实现数据的共享。例如当建立一个标识Tag= mytext'的静态文本框时,该控件的句柄值就保存在该结构体的一个域中:handles.mytext(域名就是该控件的Tag属性值)。通过该控件的句柄,我们就可以索取该控件所有的信息同时
42、也可以更改该控件的属性。例如,利用get(handles.mytext,string ')可以获取标识名为 mytext '的静态文本框的字串属性的当前值。利用s et(handles.mytext,' string','属性值 ');guidata(hObject,handles);可以更改其 string 属性值。注意:无论何时,只要是更新了结构体 handles ,就必须及 时地 使用 guidata指令保存这种更新 ,否则更新是无效的! guidata 指令的使用格式固定为上述形式。另外,还可以给结构体 handles 开辟新的域,用来保
43、存用户的数据,比如在本例中handles.a=str2num(get(handles.edit1, string ' );guidata(hObject,handles)首先获取 Tag 属性值为 edit1 的可编辑文本框的输入字串 ( 即参数 a 的值,注意键盘输入 的其实是字符型数据 ) ,然后转换成数值型数据,即参数 a 的值 200 ,最后把它存放在结构 体 handles 一个新的域 a 中。所以 handles.a 的内容就是 200 。注意结构体 handles 更新后要及时用 guidata 保存。最后指出, 结构体 handles 中的数据可以在所有子函数中共享 。
44、比如在任意一个子 函数体内,指令 get(handles.mytext, ' string ')都可以获取标识名是 mytext 的控 件的 string 属性值。再如,在任意子函数内,指令 handles.a 都可以提取保存在域名 a 中的用户数据。 编写回调函数这是最后一步工作。 本例 GUI 界面的设计意图是: 首先设置好背景色和电子的显示色, 然后输入各种仿真参数以及点选各个选项, 最后运行仿真。 因此只需编写两种回调函数: “设 置颜色”的回调函数和“运行仿真”的回调函数。在前者中完成相应色彩的设置,在后者中 首先要获取各个文本框输入的参数和各种选项,然后再绘制相应的
45、电子衍射图形。 对设置背景色的菜单编写回调函数本例设置了黑色和白色两种背景,相应子菜单的标识名(即Tag属性值)分别为Me null和 Menu12 (可在菜单编辑器 Menu Editor 中查看)。打开 ElectronWave_GUI .m 文件,找到 设置黑色背景的子菜单的回调函数Menu11_Callback,在该函数体内空白处添上下列指令:set(handles.axes1,'color','k')% 设置标识名为 axes1 的轴对象 ( 界面左侧坐标轴 ) 的颜色属性为黑色 当鼠标点击界面上的黑色菜单时, 系统就会执行和该菜单联系的回调函数 Me
46、nu11_Callback, 也即执行上面的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 创建了一个新的域 ElectronsColor ,用来存放电子的显示色 ( 字符型数据,此处是红色 r ) ;第二句是保存更新 (必须 ) !在下面编写“运行仿真”按 钮的回调函数时,将调用域 ElectronsColor 中的内容,作为绘制电子图形时的显示色。类似地,找到设置白色的子菜单的回调函数 Menu22_Callback ,在该函数体内空白处添 上下列指令:handles.ElectronsColor
48、='w' guidata(hObject,handles); 编写“运行仿真”按钮的回调函数在 ElectronWave_GUI .m 文件中,找到和该按钮联系的回调函数pushbutton1_Callback ,或者右键点击界面上的“运行仿真”按钮,在弹出的菜单中点选View Callbacks Callback ,可以快速切换到回调函数 pushbutton1_Callback 。编写该回调函数时,首先要获取各个文本 框输入的参数和各种控制选项, 然后再绘制相应的电子衍射图形。 在该回调函数的空白处输 入下列代码:% 获取各个编辑文本框输入的参数a=1e-9*str2num
49、(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);% 获取弹出框中的选项?% 选中2 个子窗口,以便对照 2 个结果图B=pi*(a+b)/(lamda*D);switch get(handles.popupmenu1,'value') case 1N=2000;case 2N=200;c
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年上海市各区高三二模语文试题汇编《古诗鉴赏》含答案
- 《网络布局》课件
- 小儿透析失衡综合征的临床护理
- 2025商场租赁合同范本模板
- 2025教科书供货合同范本
- 社工模拟考试卷子及答案
- 山西省一模初中化学试卷及答案
- 三中中学初一试卷及答案
- 2025便捷高效的借款合同
- 老年人社会参与与互助合作考核试卷
- 国家开放大学《课程与教学论》形考任务1-4参考答案
- 药品网络交易服务三方平台质量管理体系文件-B2B平台(完整版)
- 护士延续注册体检表
- CJJ 82-2012 园林绿化工程施工及验收规范
- 服装导购工作合同范本
- 丽声北极星分级绘本第二级上Dinner for a Dragon 教学设计
- 用人单位职业健康监护档案(一人一档)
- 80吨吊车性能表
- 3Dmax笔试试题
- 某大厦供配电系统毕业设计(论文)
- 第一步登录山东省特种设备作业人员许可申报审批系统
评论
0/150
提交评论