资源描述
1,第七章 Matlab的图形用户界面GUI,GUI设计工具简介 GUI向导设计 GUI程序设计,2,第一节 GUI设计工具简介,通常在开发一个应用程序时都会尽量做到界面友好、直观。最常用的方法就是使用图形用户界面。在Matlab中,图形用户界面是一个包含多种对象的图形窗口。用户必须对功能对象进行界面布局和编程,从而使用户在激活GUI的功能对象时能够执行相应的行为。 Matlab为用户开发图形界面提供了一个方便、高效的集成开发环境GUIDE(Graphic User Interface Development Environment)。GUIDE主要是一个界面设计工具集,Matlab将所有GUI的控件都集成在这个环境中并提供界面外观、属性和行为响应方式的设置方法。GUIDE将用户设计好的GUI界面保存在一个FIG文件中,同时还自动生成一个包含GUI初始化和组件界面布局控制代码的M文件。这个M文件为实现回调函数(当用户激活GUI某一个组件时执行的函数)提供了一个参考框架,这样既简化了GUI应用程序的创建工作,用户又可以直接使用这个框架来编写自己的函数代码。,3,整个GUI的实现过程可以分为以下几步: 使用界面设计编辑器进行GUI界面布局设计; 理解应用程序M文件中所使用的编程技术; 编写GUI组件行为响应控制(即回调函数)代码。 一、启动GUIDE 在Matlab中,GUIDE提供了多种设计模板以方便用户使用GUI。这些模板均包含相关的回调函数,用户可以打开它所对应的M文件,看到它们的工作方式,或修改相应的函数,从而实现自己需要的功能。 在Matlab 中,可以通过如下两种方法来访问模板: 直接输入“guide”命令,打开如图7-1所示的界面; 通过File菜单中的New选项也可以打开GUI模板界面。,4,图7-1 进入GUI的初始界面,5,在创建新的GUI时,Matlab 提供了空白模板、带有控制按钮的模板、带有坐标轴和菜单的模板以及问答式对话框4种模板。其中空白模板如图7-2所示:,图7-2 空白界面编辑器外观图,6,二、用户界面控件对象介绍,在空白模板中GUIDE提供了用户界面控件以及界面设计工具集来实现用户界面的创建工作,用户界面控件分布在界面编辑器的左侧,下面我们对各控件加以介绍。 :按钮(Push Button),是小的矩形面,在其上面标有说明该按钮功能的文本。将鼠标指针移动至按钮,单击鼠标,按钮被按下随即自动弹起,并执行回调程序。 按钮的“Style”属性的默认值是“pushbotton”。,7,:开关按钮(Toggle Button) 和一般按钮形状相同,区别在于它有两种状态,用鼠标单击按钮,它会从一种状态变成另一种状态,并执行相应的回调程序(两种状态各对应不同的回调程序)。 按钮“开”时,Value属性的值为在Max属性中指定的值;按钮“关”时,Value属性的值为在Min属性中指定的值。 按钮的“Style”属性的默认值是“togglebutton”。 :编辑框(Edit Text),允许用户动态地编辑文本字符串或数字,就象使用文本编辑器或文字处理器一样。编辑框一般用于让用户输入或修改文本字符串和数字。 编辑框的“String”属性“的默认值是“Edit Text”。,8,:单选按钮(Radio Button),又称无线按钮,它由一个标注字符串(在“String” 属性中设置)和字符串左侧的一个小圆圈组成。当它被选择时,圆圈被填充一个黑点,且属性“Value”的值为“1”;若未被选择,圆圈为空,属性的“Value”值为“0”。 单选按钮一般用于在一组互斥的选项中选择一项。为了确保互斥性,各单选按钮的回调程序需要将其它各项的“Value”值设为“0”。 单选按钮 “style”的属性的默认值是“Radio Button”。,9,: 弹出式菜单(Pop-up Menu),向用户提出互斥的一系列选项清单,用户可以选择其中的某一项。弹出式菜单下拉式菜单,它不受菜单条的限制,可以位于图形窗口内的任何位置。 通常状态下,弹出式菜单以矩形的形式出现,矩形中含有当前选择的选项,在选项右侧有一个向下的箭头来表明该对象是一个弹出式菜单。当指针处在弹出式菜单的箭头之上并按下鼠标时,出现所有选项。移动指针到不同的选项,单击鼠标左键就选中了该选项,同时关闭弹出式菜单,显示新的选项。 选择一个选项后,弹出式菜单的“Value”属性值为该选项的序号。 弹出式菜单的“Style”属性的默认值是“popupmenu”,在“string”属性中设置弹出式菜单的选项字符串,在不同的选项之间用“|”分隔,类似于换行。,:,10,:图文框(Panel),图文框是填充的矩形区域。一般用来把其它控件放入图文框中,组成一组。图文框本身没有回调程序。注意只有用户界面控件可以在图文框中显示。由于图文框是不透明的,因而定义图文框的顺序就很重要,必须先定义图文框,然后定义放到图文框中的控件。因为先定义的对象先画,后定义的对象后画,后画的对象覆盖到先画的对象上。,:静态文本框(text),静态文本框用来显示文本字符串,该字符串内容由属性“string”确定。静态文本框之所以称为“静态”,是因为文本不能被动态的修改,而只能通过改变“String”属性来更改。静态文本框一般用于显示标记、提示信息及当前值。静态文本框的“Style”属性的默认值是“text”。,:,11,:列表框(listbox),列表框列出一些选项的清单,并允许用户选择其中的一个或多个选项,一个或多个的模式由Min和Max属性控制。Value 属性的值为被选中选项的序号,同时也指示了选中选项的个数。 当单击鼠标按钮选中该项后,Value属性的值被改变,释放鼠标按钮的时候Matlab执行列表框的回调程序。 列表框的“Style”属性的默认值是“listbox”。 :复选框(checkbox),又称检查框,它由一个标注字符串(在“String”属性中设置)和字符串左侧的一个小方框所组成。选中时在方框内添加“”符号,“Value”属性值设为“1”;未选中时方框变空,“Value”属性值设为“0”。复选框一般用于表明选项的状态或属性。,12,:滑动条(slider),又称滚动条,包括三个部分,分别是滑动槽,表示取值范围;滑动槽内的滑块,代表滑动条的当前值;以及在滑动条两端的箭头,用于改变滑动条的值。 滑动条一般用于从一定的范围中取值。改变滑动条的值有三种方式,一种是用鼠标指针拖动滑块,在滑块位于期望位置后放开鼠标;另一种是当指针处于滑块槽中但不在滑块上时,单击鼠标按钮,滑块沿该方向移动一定距离,距离的大小在属性“SliderStep”中设置,缺省情况下等于整个范围的10%;第三种方式是在滑块条的某一端用鼠标单击箭头,滑块沿着箭头的方向移动一定的距离,距离的大小在属性“SliderStep”中设置,缺省情况下为整个范围的1%。 滑动条的“Style”属性的默认值是“slider” :按钮组(Button Group),放到按钮组中的多个单选按钮具有排它性,但与按钮组外的单选按钮无关。制作界面时常常会遇到有几组参数具有排它性的情况,即每一组中只能选择一种情况。此时,可以用几组按钮组表示这几组参数,每一组单选按钮放到一个按钮组控件中。,13,图7-3 带有控件的图形界面编辑器外观图,三、几何位置排列工具,14,利用对象对齐工具,可以很方便地对对象设计编辑器中设计区内多个对象的位置进行调整。从对象设计编辑器界面的工具栏上选择按钮,或者选择“Tools”菜单下的“Align Objects.”选项,可以打开对象位置调整器,如图7-4所示:,图 7-4 排列工具栏外观图,利用对象对齐工具,可以设置对象在垂直方向和水平方向上的对齐方式和间距。选中多个对象后,可以方便地通过对象对齐工具进行调整。 上半部分为垂直方向调整控制区,下面为水平方向调整控制区。将在下节GUI的向导设计中进一步熟悉排列工具的使用。,15,四、用属性编辑器设置控件属性,利用对象属性编辑器,可以查看、修改和设置每个对象的属性值,在对象设计编辑器界面工具栏上选择“View” 下的“Inspect Properties”选项,可以打开对象属性编辑器。另外,在Matlab命令窗口的命令行输入inspect,也可以打开对象属性编辑器。对象属性编辑器如图7-5所示:,图7-5 属性编辑器外观图,16,五、菜单编辑器 利用菜单编辑器,可以创建、设置、修改下拉式菜单和弹出式菜单。在GUIDE中单击工具栏上的按钮,或者选择“Tools”菜单中的“Menu Editor”选项,打开菜单编辑器的界面,如图7-6所示:,图 7-6 菜单编辑器界面图,GUIDE能够创建两种类型的菜单。一种是在图形窗口菜单栏中显示的菜单栏菜单;另一种是当用户在图形对象上单击鼠标右键时产生的上下文菜单。可以使用菜单编辑器来创建这两种类型的菜单。,17,1创建菜单栏菜单 图7-6中左上角第一个按钮用于创建下拉式菜单。用户可以通过点击它来创建下拉式主菜单;第二个按钮用于创建下拉式菜单的子菜单,在选中已经创建的下拉式菜单后,可以单击这个按钮来创建选中的下拉式主菜单的子菜单。选中创建的某个下拉式菜单后,菜单编辑器的右边就会出现显示该菜单的有关属性,用户可以在这里设置、修改菜单的属性。,图 7-7 下拉式菜单创建图,18,2 创建上下文菜单 利用菜单编辑器创建上下文菜单对象后,当用户在图形对象上单击鼠标右键时,上下文菜单会随之出现,这样可以根据上下文的具体内容修改图形对象的相应属性,故菜单编辑器能够创建上下文菜单并将菜单与图形对象联系起来。,图7-8 上下文菜单创建图,注意:在创建菜单之前要选择菜单编辑器的Context Menu标签界面。,19,六、对象浏览器 利用对象浏览器,可查看当前所创建的图形对象。从对象设计编辑器界面的工具栏上选择,或者选择“View”菜单下的“Object Browser”选项,可以打开对象浏览器。,图 7-9 对象浏览器,20,第二节 GUI向导设计,GUI的向导设计,简单地说,就是利用GUI设计工具集实现多种控制对象的设计。本节我们将通过实例实践其具体操作过程。 【例7-1】 设计一个带有三个按钮和一个坐标轴的图形用户界面,当用鼠标点击三个按钮时,分别在坐标轴内画sphere,和membrane三个图形。peaks 创建控件 前面我们已经建立了带有一个坐标轴和三个按钮控件的图形界面,这里就不赘述了,如前图7-3所示。 设置控件对齐方式 若控件排列不够整齐,当控件个数较少时,逐个调整尚可,但当控件个数较多时,逐个调整将变得麻烦,费时,这时我们可以应用几何位置排列工具对控件的位置进行调整。 首先要将待调整的控件同时选中。选中方法有两种:一是按住“Ctrl”键,用鼠标左键逐一点击要调整的控件;二是按住鼠标左键进行拖拽框选,然后点击工具栏上的打开几何位置排列工具窗口,再点击下面的,使得所选的控件左对齐,点击“确定”后,界面设计编辑器效果如图7-10所示。,21,图7-10 调整空间位置后的界面设计编辑器外观图,22,设置控件属性 图7-10 共有三个按钮,且每个按钮行使相应的功能,在按钮上双击鼠标左键可以打开按钮属性编辑器,如图7-11所示,该图的左侧是按钮的所有属性,右侧是其属性值。,图7-11 按钮属性编辑器外观图,23,编写回调程序 前三部的工作结束后,界面上的三个按钮就要行使其功能了。首先,点击菜单栏上的保存按钮进行文件的保存,此时,会弹出“save as”对话框,如图7-14所示,进行FIG文件保存,文件命名为myGUI。,图 7-14 保存图形界面的对话框图,24,同时,Matlab会自动创建一个同名的M文件,并且自动打开,如图7-15所示。,图7-15 自动生成的M文件,其次,在自动生成的M文件中,找到与三个按钮有关的回调子函数,本例中的回调子函数见图7-16所示的光标定位处(这里我们仅截取了按钮1的回调子函数)。,25,图7-16 按钮1的回调子函数定位图,26,下面就可以在该子函数的空白处填写回调程序了。 例如,按钮“sphere”的回调程序为: sphere; axis tight; 按钮“peaks”的回调程序为: peaks; axis tight; 按钮“membrane”的回调程序为: membrane; axis tight; 上面的三个回调程序在自动生成的命名为myGUI的M文件 编辑器中录入的情况如图7-17所示,为了减少图占用太大 的空间,将编辑器中三个子函数部分的解释性语句已删去。,27,图7-17 M文件编辑器中的三个按钮的回调子函数,28,程序录入后,点击保存图标,将M文件重新保存, 然后点击M文件编辑器上的运行快捷按钮或返回 到图7-13未被激活的图形界面,点击工具栏上的 运行图标,此时则生成如图7-18(a)所示的被激活 的图形界面。当点击“sphere”按钮时,在空白的 坐标轴处出现球体,如图7-18(b)所示;点击 “peaks”按钮时,在空白的坐标轴处出现尖峰图, 如图7-18(c)所示;点击“membrane”按钮时,在 空白的坐标轴处出现membrane图,如图7-18(d) 所示。,29,(a) (b),(c) (d) 图7-18 运行结果 (a) 被激活后的界面; (b) sphere图; (c) peaks图; (d) membrane图,30,至此,图形界面的GUI向导设计就完成了。还有一点需要说明的是,在编写回调程序时,也可以在属性编辑器的Callback属性中录入代码。事实上,两种方法得到的结果是相同的。但是,第二种方法(直接修改Callback属性值)适用于代码语句少的的情况,如果函数体由多条语句组成,最好采用本例所使用的方法。,31,第三节 GUI程序设计,这一节我们将介绍如何应用,用函数编写用户界面,主要涉及三个函数:uimenu(菜单),uicontextmenu(上下文菜单)和uicontrol(控件)。 一、用户界面菜单对象和上下文菜单对象的建立 1 用户界面菜单对象的建立 自制用户菜单对象,通过函数uimenu创建,调用格式 为: h=uimenu(PropertyName1,value1,PropertyName2,value2,),,32,即在当前图形窗口上部的菜单栏创建一个菜 单对象,并返回一个句柄值。函数变量 PropertyName是所建菜单的属性,value是属 性值。菜单对象的属性分为公共属性、基本 控制属性和callback管理属性三部分,关于 属性及其的详细内容见Matlab帮助文件,这 里介绍一些常用重要属性的设置方法。,33, label和callback 这是菜单对象的基本属性,编写一个具有基本功能的菜单必须要设置label和callback属性。label是在菜单项上显示的菜单内容;callback是用来设置菜单项的回调程序。 checked和 separator checked 属性用于设置是否在菜单项前添加选中标记。记为”on”表示添加,”off”表示不添加。因为有些菜单的选中标记相斥,这就要求给一个菜单项添加选中标记的同时去掉另一个选项的标记; separator 用于在菜单项之前添加分隔符,以便使菜单更加清晰。 Background Color和 Foreground Color Background Color(背景色)是菜单本身的颜色; Foreground Color(前景色)是菜单内容的颜色。,34,【例7-2】 建立一个包含用户界面菜单项的图形界面,并可执行菜单项的相应功能,分别绘制membrane、peaks和sinc函数图形。 Matlab程序如下: % 首先建立一个图形窗口,去除窗口本身包含的菜单条和工具条,并命名为myfirstGUI h0=figure(menubar,none,toolbar,none,name,myfirstGUI); % 从左至右,依次建立各级菜单% 先建立【Draw】菜单和其下的【Membrane】【Peaks】和【Sinc】子菜单项 h1=uimenu(h0,label,Draw); h11=uimenu(h1,label,Membrane,callback,membrane); h12=uimenu(h1,label,Peaks,callback,peaks); h13=uimenu(h1,label,Sinc,callback,. x,y=meshgrid(-5:0.5:5);,r=sqrt(x.2+y.2)+eps;,. z=sin(r)./r;,surf(z);); 该段代码运行后,生成如图7-19所示的带菜单界面图。,35,图7-19 生成“membrane”的图形界面,36,% 建立第二个菜单【Colormap】及其下的【Cool】【Hot】【Default】子菜单项,当某项被选中时,添加选中标记,同时去掉其它选项的选中标记h2=uimenu(h0,label,ColorMap); h22(1)=uimenu(h2,label,Hot,. callback,. set(h22,checked,off);,. set(h22(1),checked,on);,colormap(hot);); h22(2)=uimenu(h2,label,Cool,. callback,. set(h22,checked,off);,. set(h22(2),checked,on);,colormap(cool);); h22(3)=uimenu(h2,label,Spring,. callback,. set(h22,checked,off);,. set(h22(3),checked,on);,colormap(Spring);); 该段代码运行后,生成如图7-20所示的界面图。,37,图7-20 生成“hot”效果的图形界面,38,% 建立控制坐标轴的显示菜单【Axis】,用于是否显示坐标轴h3=uimenu(h0,label,Axis); h31=uimenu(h3,label,Axis on,callback,axis on);h32=uimenu(h3,label,Axis off,callback,axis off); 该段代码运行后,生成如图7-21所示的界面图。,图7-21 生成带坐标轴的图形界面,39,% 建立关闭图形用户界面按钮【close】hbutton=uicontrol(position,80 30 60 30,string,close,fontsize,8, fontweight,bold,callback,close); 至此,就形成了一个用户菜单界面,执行结果如图7-19、7-20和7-21所示的三个图形。实际上,运行上面的代码后,仅产生一个图形界面,为了让读者看清界面内的主菜单下的子菜单所对应的功能,在相应的位置给出了该子菜单的Callback属性的回调程序结果。,40,提示:在单引号内的字符串必须用两单引号 (不等于双引号)表示所需的单引号; 在设置选中标记时,先用命令 set( h22,”check”,”off”), 将h22中三个句柄对应的菜单项都设 为未选中状态,然后,把选择的菜单项 设为选中状态,以保证多个选项之间 的互斥性。,41,2 用户界面上下文菜单的建立 用户界面上下文菜单对象,与固定位置的菜单对象相比,上下文菜单对象的位置不固定,总是与某个(些)图形对象相联系,并通过鼠标右键激活,制作上下文菜单步骤如下: 利用函数uicontextmenu创建上下文菜单对象; 利用函数uimenu为该上下文菜单对象制作具体的菜单项; 利用函数set将该上下文菜单对象和某些图形对象 联系在一起。 下面通过示例看一下uicontextmenu函数的使用。,42,【例7-3】 在一个图形窗口绘制抛物线和余弦曲线,并创建一个与之相联系的上下文菜单,用于控制线条的颜色、线宽、线型及标记点风格。 Matlab程序如下: % 画曲线y1,并设置其句柄h=uicontextmenu; t=-1:0.1:1;subplot(2,1,1);y1=t.2;h_line1=plot(t,y1); % 建立上下文菜单 uimenu(h,label,red,callback,set(h_line1,color,r); uimenu(h,label,green,callback,set(h_line1,color,g); uimenu(h,label,yellow,callback,set(h_line1,color,y); uimenu(h,label,linewidth1.5,callback,set(h_line1,linewidth,1.5); uimenu(h,label,linestyle*,callback,set(h_line1,linestyle,*); uimenu(h,label,linestyle:,callback,set(h_line1,linestyle,:); uimenu(h,label,marker,callback,set(h_line1,marker,s); set(h_line1,uicontextmenu,h) % 使上下文菜单与正弦曲线h_line1相联系 title(抛物线和余弦曲线,fontweight,bold,fontsize,14) set(gca,xtick,-1:0.5:1) % 设置坐标轴的标度范围 set(gca,xticklabel,-1,0.5,0,0.5,1) % 设置坐标轴的标度值,43,%画曲线y2, 并设置其句柄 subplot(2,1,2);t=0:0.1:2*pi;y2=cos(t);h_line2=plot(t,y2); h=uicontextmenu; uimenu(h,label,red,callback,set(h_line2,color,r); uimenu(h,label,crimson,callback,set(h_line2,color,m); uimenu(h,label,black,callback,set(h_line2,color,k); uimenu(h,label,linewidth1.5,callback,set(h_line2,linewidth,1.5); uimenu(h,label,linestyle*,callback,set(h_line2,linestyle,*); uimenu(h,label,linestyle:,callback,set(h_line2,linestyle,:); uimenu(h,label,marker,callback,set(h_line2,marker,s); set(h_line2,uicontextmenu,h) set(gca,xtick,0:pi/2:2*pi) set(gca,xticklabel,0,pi/2,pi,3pi/2,2pi) xlabel(time 0-2pi,fontsize,10),44,% 建立关闭图形用户界面按钮【close】 hbutton=uicontrol(position,80 30 60 30,string,close, fontsize,8,fontweight,bold,callback,close); 在Matlab中运行该程序段,得到如图7-22所示图形。将鼠标指向线条,单击鼠标右键,弹出上下文菜单,在选中某菜单项后,将执行该菜单项的操作。,45,(a) (b) 图7-22 带有上下文菜单的图形界面 (a) 将抛物线的线型设为“*”时的图形界面;(b) 将余弦曲线的线宽设为“1.5”时的图形界面,46,二、用户界面控件对象的建立 除了菜单以外,控件对象是另一种实现用户与计算机交互的重要手段。用户界面控件对象是这样一类图形界面的对象:用户用鼠标在控件对象上进行操作,鼠标点击控件时,将激活该控件所对应的后台应用程序,并执行该程序。利用函数命令创建控件对象的格式为: H=uicontrol (PropertyName1,value1,PropertyName2,value2,) 当用函数创建控件时,这里我们有必要对控件的几个重要属性给予介绍。,47,Value属性:控件的当前值,格式为标量或变量。该属性对不同的控件有不同的取值方式,分别为: 复选框:当此控件被选中时,Value的值为属性Max中的设置的值;未被选中时Value 的值为属性中设置的值。 列表框:被选中选项的序号,当有多个选项被选中时, Value的属性值为向量。序号指的是选项的排列次序, 最上面的选项序号为1,第二个选项序号为2。 弹出式菜单:和列表框类似,也是被选中选项的序号, 只是弹出式菜单只能有一个选项被选中,因而Value 属性值是标量。 单选按钮:被选中时Value的值为属性Max中设置的值: 未被选中时,Value的值为属性Min中设置的值。 滑动条:Value的值等于滑块指定的值。 开关按钮:“开”时Value的值为属性Max中设置的值: “关”时Value的值为属性Min中设置的值。,48,Max属性:指定Value属性中可以设置的最大值,格式为标量。该属性对不同的控件有不同的含义,分别如下所述:,复选框:当复选框被选中时Value属性的取值。 编辑框:如果Max的值减去Min的值大于1,那么编辑框可以接受多行输入文本;如果Max的值减去Min的值小于或等于1,那么编辑器只能接受一行输入文本。 列表框:如果Max的值减去Min的值大于1,那么允许选取多个选项;如果Max的值减去Min的值小于或等于1,那么只能选取一个选项。 单选按钮:当单选按钮被选中时Value属性的取值。 滑动条:滑动条的最大值,缺省值是1 开关按钮:当开关按钮“开”(被选中)时Value属性的取值。缺省值是1。,文本框、弹出式菜单、按钮和静态文本框无此属性。,49,Min属性:指定Value属性中可以设置的最小值,格式为标量。该属性对不同的控件有不同的含义,分别如下所述:,复选框:当复选框被选中时Value属性的取值。 编辑框:如果Max 的值减去Min的值大于1,那么编辑框可以接受多行输入文本;如果Max的值减去Min的值小于或等于1,那么编辑器只能接受一行输入文本。 列表框:如果Max的值减去Min的值大于1,那么允许选取多个选项;如果Max的值减去Min的值小于或等于1,那么只能选取一个选项。 单选按钮:当单选按钮未被选中时Value属性的取值。 滑动条:滑动条的最小值,缺省值是0。 开关按钮:当开关按钮“开”(被选中)时属性的取值。缺省值是1。,文本框、弹出式菜单、按钮和静态文本框无此属性。,50,【例7-4】 建立一个包含控件的图形用户界面,点击控件时执行该控件的相应功能,要求绘制membrane,peaks和sphere函数图形,并有光照控制效果。 % 建立图形窗口和坐标轴,去除窗口本身的菜单条和工具条,并命名为 mysecondGUI h0=figure(menubar,none,toolbar,none,position,198 56 408 468,name,mysecondGUI); h1=axes(parent,h0,position,0.15 0.45 0.7 0.5,visible,off); % 建立静态文本框和动态文本框 htext1=uicontrol(parent,h0,units,points,position,54 110 45 15,string,input title,style,text); hedit=uicontrol(parent,h0,units,points,position,100 110 45 16,callback,title(get(hedit,string),style,edit);,51,% 创建三个按钮 hbutton1=uicontrol(parent,h0,units,points,string,Sphere,. position,20 65 50 18,callback,mesh(sphere);axis tight); hbutton2=uicontrol(parent,h0,units,points,string,Membrane,. position,75 65 50 18,callback,mesh(membrane);axis tight); hbutton3=uicontrol(parent,h0,units,points,string,Sinc,position,135 65 50 18,callback,. x,y=meshgrid(-5:0.5:5);,r=sqrt(x.2+y.2)+eps;, z=sin(r)./r;,mesh(x,y,z); % 创建静态文本框和滚动条,鼠标拖动滚动条控制图形的颜色变化 htext2=uicontrol(parent,h0,units,points,position,. 20 30 45 15,string,brightness,style,text); hslider=uicontrol(parent,h0,units,points,position,. 65 30 120 15,min,-1,max,1,style,slider,callback,. brighten(get(hslider,value); % 建立静态文本框和五个单选按钮,52,htext3=uicontrol(parent,h0,units,points,position,. 200 130 80 15,string,select color:,style,text); hradio(1)=uicontrol(parent,h0,units,points,position,. 200 115 80 15,string,default,style,. radiobutton,value,1,callback,. set(hradio,value,0);,set(hradio(1),value,1);,. colormap(default); hradio(2)=uicontrol(parent,h0,units,points,position,. 200 100 80 15,string,spring,style,. radiobutton,value,1,callback,. set(hradio,value,0);,set(hradio(2),value,1);,. colormap(spring); hradio(3)=uicontrol(parent,h0,units,points,position,. 200 85 80 15,string,summer,style,. radiobutton,value,1,callback,. set(hradio,value,0);,set(hradio(3),value,1);,. colormap(summer);,53,hradio(4)=uicontrol(parent,h0,units,points,position,. 200 70 80 15,string,autumn,style,. radiobutton,value,1,callback,. set(hradio,value,0);,set(hradio(4),value,1);,. colormap(autumn); hradio(5)=uicontrol(parent,h0,units,points,position,. 200 55 80 15,string,winter,style,. radiobutton,value,1,callback,. set(hradio,value,0);,set(hradio(5),value,1);,. colormap(winter); % 建立关闭图形用户界面按钮【close】 hbutton4=uicontrol(parent,h0,units,points,string,Close,. position,200 30 50 18,callback,close);,54,至此,一个带有控件的图形用户界面就建好了,把上述程序保存,生成一个M文件,命名为mysecondGUI,然后在Matlab的命令窗口运行此文件,会生成一个下半部分仅带控件,上半部分为空的图形界面。在静态文本框中输入“sinc”,点击“Sinc”按钮,则产生如图7-23所示的图形界面。,图7-23 生成Sinc图形的GUI界面,55,同理,点击另外两个按钮“Sphere”和“Membrane”,会生成相应的三维图形;在滚动条上按住鼠标左键不动,拖动鼠标会产生不同的明亮度效果;用鼠标点击单选按钮,会产生不同的色彩效果。这里就不一一给出界面图了。 提示: 在【例7-】中的代码“r=sqrt(x.2+y.2)+eps”中出现了 “eps”,它是误差容限,或者说是一个极其微小的趋紧于0的 非零小数,这里之所以要把它加进来,是因为变量r是 “z=sin(r)./r”的分母,而根据对x和y的赋值,存在r=0这种 情况,加上eps后,可以避开分母为零的非法情况,若不加eps, 尽管也会得到运行结果,但在命令窗口会出现“Warning: Divide by zero.”这样的警告提示。在这个窗口中,我们去掉了菜单栏 和工具条,是由代码第一行中menubar,none,toolbar,none 完成的,若无此代码,则界面图上会出现菜单栏和工具条。,
展开阅读全文