第16章GUIDE工具建立GUI界面MATLAB可视化界面的设计,一般有两种方法,一是直接通过编辑M脚本文件产生GUI,这个方法在上一章已经进行详细的介绍。二是通过MATLAB图形用户界面开发环境GUIDE(GraphicalUserInterfaceDevelopmentEnvironment)来建立GUI界面。GUIDE是MATLAB为编写GUI界面提供的集成开发工具。本章将对GUIDE进行详细的介绍,包括常用的控件、控件的属性、自动产生的M文件等。然后通过一些例子程序,讲解如何使用这些控件。最后给出了两个综合一些的例子,介绍了如何建立更加实用的GUI界面。16.1采用GUIDE建立GUIGUI是通常包含图形窗口、坐标轴、菜单、按钮和文本等的用户界面。GUIDE提供了很多工具用于建立GUI界面。这些工具大大的简化了设计和建立GUI的过程。16.1.1图形用户界面概述MATLAB为图形用户界面开发提供了一个方便高效的集成开发环境,GUIDE。GUIDE是一个界面设计工具集,提供了界面的外观、属性和回调函数等。GUIDE将用户保存好的GUI界面保存在一个FIG资源文件中,同时还能够产生包含GUI初始化和组件界面布局控制代码的M文件。这个M文件为实现回调函数提供了一个参考框架。16.1.1GUIDE启动用户可以在MATLAB的命令行窗口输入:guide来启动GUIDE。产生GUIDE的快速启动窗口,如图16.1所示。在图16.1中,创建新的GUI时,有4个模版可以选择:BlankGUI(Default):系统默认为空白模版。GUIwithUicontrols:带有uicontrol对象的模版。GUIwithAxesandMenu:带有坐标轴和菜单的模版。ModalQuestionDialog:带有问答式对话框的模版。16.1.3GUI对象的常用属性利用属性查看器可以查看对象的属性值,也可以对属性值进行修改。用鼠标选中某个对象,然后单击工具栏的PropertyInspector按钮或用鼠标双击该对象,则可以调用该对象的属性查看器。下面介绍一些常用的属性。1.控件风格和外观BackgroundColor:设置控件背景颜色,使用[RGB]或颜色定义。CData:在控件上显示的真彩色图像,使用矩阵表示。ForegroundColor:用于设置控件上显示的文本的颜色。String属性:设置控件上的文本,以及列表框和弹出菜单的选项等。Visible:设置控件是否可见,可以取值为on或off,默认值为on,即控件可见。当Visible属性设置为off时,控件不可见,但是控件仍然存在。16.1.3GUI对象的常用属性2.控件的常规信息Enable属性:表示控件的使能状态,取值可以为on、inactive和off,默认值为on。设置为on时,该控件可用。设置为inavtive时,控件不可用,但是外表看起来和为on时一样。设置为off时,表示控件不可用。Style:设置控件对象的类型,可以取值为pushbutton、togglebutton、radiobutton、checkbox、edit、text、slider、frame、listbox、popupmenu,系统默认值为pushbutton。Tag:该属性为控件名称,利用该名称来命名控件的回调函数的名称。例如,对于pushbutton类型的按钮,GUIDE默认的Tag属性为pushbutton1,则回调函数为pushbutton1_Callback()。TooltipString属性:该属性为字符串,用来设置提示信息。当鼠标指针位于此控件上时,显示该提示信息。UserData:设置用户指定的数据。利用该属性可以实现数据的传递。Position:该属性设置控件对象的位置和大小,向量为[xywidthheight]。Units:设置控件的位置及大小等的单位,可以取值为pixels、normalized、inches、points、centimeters和characters。16.1.3GUI对象的常用属性3.控件的回调函数BusyAction:处理回调函数的中断。有两种选项:即Cancel:取消中断事件,queue:排队(默认设置)。ButtonDownFcn属性:按钮按下时的处理函数。CallBack属性:是连接程序界面整个程序系统的实质性功能的纽带。该属性值应该为一个可以直接求值的字符串,在该对象被选中和改变时,系统将自动地对字符串进行求值。CreateFcn:在对象产生过程中执行的回调函数。DeleteFcn:删除对象过程中执行的回调函数。Interruptible属性:指定当前的回调函数在执行时是否允许中断,去执行其他的函数。16.1.3GUI对象的常用属性4.控件当前状态信息ListboxTop:在列表框中显示的最顶层的字符串的索引。Max:最大值。Min:最小值。Value:控件的当前值。对于单选按钮如果被选中时,该属性的值为Max属性值,如果没被选中,则为Min属性值。16.1.4GUI的M文件利用GUIDE可以生成M文件框架,通过M文件决定GUI用户操作的响应。通过GUIDE可以自动生成M文件,然后在M文件中编写GUI控件的回调函数。M文件由多个子函数构成,包括主函数、Opening函数、Output函数和回调函数。其中,主函数不能修改,和文件名相同。16.1.5数据传递在GUI的各个控件之间进行数据传递,可以采用以下两种方法:利用结构体handles和控件的UserData属性。结构体handles保存了GUI的数据。当在运行GUI时,M文件会自动产生结构体handles,其中保存了所有GUI对象的数据,可以看作是一个数据的容器。用户可以在handles中找到所有控件的信息。handles在各个控件的callback之间传来传去。在结构体handles中新建字段a,并保存变量a的值。handles.a=a;guidata(hObject,handles);16.2简单实例分析利用GUIDE可以非常方便的建立GUI界面,同时建立了M文件框架。通过在M文件的回调函数中添加程序,可以非常快速的建立GUI界面。下面通过几个例子,介绍如何使用GUIDE提供的控件。16.2.1简单的按钮【例16-2】简单的按钮例子。打开GUIDE,在GUI布局区放置PushButton按钮。调制控件大小和窗口大小。双击该按钮设置属性值,String设置为:关闭。choice=questdlg('你确定要关闭吗?','关闭对话框','Yes','No','No');switchchoice,case'Yes'delete(handles.figure1);return;case'No'return;end16.2.2简单的滑动条【例16-3】简单的滑动条例子。打开GUIDE,在GUI布局区放置静态文本控件StaticText和滑动条控件Slider。然后用鼠标双击静态文本控件,设置String属性的值为:“简单滑动条例子!”。设置滑动条的属性,最大值为1.0,最小值为0,最小步长SliderStep为[0.010.1]。16.2.3弹出式菜单【例16-4】弹出式菜单例子程序。打开GUIDE,在GUI布局区放置静态文本控件StaticText、可编辑文本EditText,还有弹出式菜单Pop-upMenu。设置静态文本控件的String属性为:你选择的颜色。可编辑文本的String属性为空。设置弹出式菜单的String属性。修改文字的大小为14。用鼠标拖动来修改控件的大小和窗口的大小。16.2.4列表框【例16-5】列表框例子程序。打开GUIDE,在GUI布局区放置可编辑文本EditText和列表框Listbox。设置静态文本控件的String属性为空。设置列表框的String属性。修改控件的文字大小为14。用鼠标拖动来修改控件的大小和窗口的大小。16.2.5加法运算【例16-6】加法运算例子程序。打开GUIDE,在GUI布局区放置2个可编辑文本EditText,Tag属性分别为edit1和edit2。添加3个静态文本StaticText,Tag属性分别为text1、text2和text3。然后添加pushbutton按钮,String属性为“计算”。修改控件的文字大小为14。用鼠标拖动来修改控件和窗口的大小和位置。16.2.6坐标轴【例16-7】简单坐标轴例子程序。打开GUIDE,在GUI布局区放置坐标轴Axes,3个可编辑文本EditText,3个静态文本StaticText,两个按钮pushbutton。3个静态文本的String属性分别为:频率、初相和幅值。3个可编辑文本的Tag属性分别为edit1、edit2和edit3,分别表示正弦信号的频率、初相和幅值,默认值分别为10、0和1。两个按钮的String属性分别为绘图和清除。修改控件的文字大小为14。用鼠标拖动修改控件和窗口的大小和位置。16.2.7菜单【例16-8】菜单例子程序。打开GUIDE,在GUI布局区放置坐标轴Axes,单击工具栏的添加菜单按钮,编辑菜单。修改菜单的属性Label和Tag。用鼠标拖动来修改控件和窗口的大小和位置。16.2.8快捷菜单【例16-9】快捷菜单例子程序。打开GUIDE,在GUI布局区放置坐标轴Axes,单击工具栏的添加菜单按钮,编辑快捷菜单。修改菜单的属性Label和Tag。双击坐标轴,显示坐标轴的属性设置窗口,修改坐标轴的属性UIContextMenu属性为AxesMenu。用鼠标拖动来修改坐标轴和窗口的大小和位置。16.3综合实例分析利用GUIDE设计GUI界面非常的方便、简单。在设计复杂的GUI界面时,需要很多的控件,例如菜单、按钮、坐标轴等。下面介绍几个综合一些的例子程序。16.3.1声音的显示和播放【例16-10】声音显示和播放例子。打开GUIDE,在GUI布局区放置坐标轴Axes,添加弹出式菜单Pop-upMenu,添加2个按钮pushbutton。双击弹出式菜单,修改属性值String,分别为:选择声音、chirp、handel和laughter。修连个按钮的String属性,分别为:播放声音和程序退出,修改Tag属性分别是palybutton和closebutton。用鼠标拖动来修改坐标轴和窗口的大小和位置。16.3.2语音实时采集和显示【例16-11】语音实时采集和显示例子。打开GUIDE,在GUI布局区放置2个坐标轴Axes,添加3个按钮pushbutton。修改3个按钮的属性String,分别为:开始、暂停和退出,Tag属性分别为startbutton、stopbutton和exitbutton。修改控件的文字大小为14。用鼠标拖动来修改坐标轴和窗口的大小和位置。16.6本章小结本章详细的介绍了用于GUI界面开发的GUIDE工具。GUIDE提供了很多的控件,利用这些控件可以非常方便的设计GUI界面。读者对控件的常用属性需要有一个大概的了解,通过属性的设置可以实现复杂的功能。对于常用控件的使用,本章给出了简单的例子程序。最后,通过两个综合一些的例子,讲解如何设计复杂的GUI界面。