第13章图形界面设计Matlab中设计图形用户界面的方法有两种:使用可视化的界面环境和通过编写程序。图形用户界面(GUI)是指由窗口、菜单、图标、光标、按键、对话框和文本等各种图形对象组成的用户界面。它让用户定制用户与Matlab的交互方式,而命令窗口不是唯一与Matlab的交互方式。图形用户界面设计工具的启动1.命令方式图形用户界面GUI设计工具的启动命令为guide,格式为:①guide功能:启动GUI设计工具,并建立名字为untitled.fig的图形用户界面。功能:启动GUI设计工具,并打开已建立的图形用户界面filename。②guidefilename2.菜单方式在Matlab的主窗口中,选择File菜单中的New菜单项,再选择其中的GUI命令,就会显示GUI的设计模板。Matlab为GUI设计一共准备了4种模板,分别是:BlankGUI(Default)(空白模板,默认);GUIwithUicontrols(带控件对象的GUI模板);GUIwithAxesandMenu(带坐标轴与菜单的GUI模板);ModalQuestionDialog(带模式问题对话框的GUI模板)。当用户选择不同的模板时,在GUI设计模板界面的右边就会显示出与该模板对应的GUI图形。空白界面有控件的模板界面有轴对象和菜单的模板界面标准询问窗口图形用户界面设计窗口图形用户界面GUI设计窗口由菜单栏、工具栏、控件工具栏以及图形对象设计区等4个功能区组成。在GUI设计模板中选中一个模板,然后单击OK按钮,就会显示GUI设计窗口。选择不同的GUI设计模式时,在GUI设计窗口中显示的结果是不一样的。左图为空白GUI模板情形有控件的模板界面有轴对象和菜单的模板界面标准询问窗口2019/12/202019/12/20从图可见,GUIDE其实是一个界面设计工具集合,它提供了一系列工具用来创建图形用户界面。这些工具包括:(1)对齐工具。用来将界面窗口中的图形对象按横向或纵向对齐,以使界面美观。(2)菜单编辑工具。用来设计和创建窗口菜单和现场菜单。(3)Tab顺序编辑工具。用来确定当按下键盘上的Tab按键时,界面上的控件获得输入焦点的顺序。2019/12/20(4)工具条编辑工具。用来设计和创建窗口工具条。(5)M文件编辑器。用来打开与图形用户界面相关联的M文件,供用户编辑修改。(6)属性查看器。用来查看和设置图形对象的属性值。(7)对象浏览器。观察当前图形用户界面上的图形对象的句柄的继承关系表。1.位置调整工具(Alignmenttool)2.属性查看器(PropertyInspector)3.菜单编辑器(MenuEditor)4.Tab顺序编辑器(TabOrderEditor)5.对象浏览器(ObjectBrowsers)6.工具条编辑工具(toolbareditors)7.m文件编辑器(mfileeditors)按钮(PushButton):执行某种预定功能或操作滚动条(Slider):可输入指定范围的数量值;单选框(RadioButton):单个的单选框用来在两种状态之间切换,多个单选框组成一个单选框组时,用户只能在一组状态中选择单一的状态,或称为单选项;复选框(Checkbox):单个的复选框用来在两种状态之间切换,多个复选框组成一个复选框组时,可使用户在一组状态中作组合式的选择,或称为多选项;控件工具文本编辑器(EditText):用来使用键盘输入字符串的值,可以对编辑框中的内容进行编辑、删除和替换等操作;静态文本框(StaticText):仅用于显示单行的说明文字;弹出式菜单(PopupMenus):让用户从一列菜单项中选择一项作为参数输入;列表框(ListBox):在其中定义一系列可供选择的字符串;开关按钮(ToggleButton):产生一个动作并指示一个二进制状态(开或关),当鼠点击它时按钮将下陷,并执行callback(回调函数)中指定的内容,再次点击,按钮复原,并再次执行callback中的内容;表格table:创建表格坐标轴axes:显示后台程序运行输出结果面板panel:创建容器对象,将控件安排一个空间按钮组buttongroup:用来创建一个容器对象,来集中管理一组具有互斥功能的单选按钮和双位按钮。2019/12/20处理用户界面控件的回调函数假设某个用户界面控件的Callback设置为函数句柄的形式,hObject为执行Callback的对象的句柄,eventdata为包含事件信息的结构体。下面分别讲述各种控件的回调函数的处理方法。checkbox用户可以通过查询列表框的Value属性值,来确定列表框是否被选中。functioncheckbox1_Callback(hObject,eventdata)%判断checkbox是否被选中if(get(hObject,'Value')==get(hObject,'Max'))%checkbox被选中,在这里添加处理代码else%checkbox未被选中,在这里添加处理代码end2019/12/20edit使用get命令,通过获取编辑框的String属性值,即可获得用户在编辑框中的输入内容。functionedittext1_Callback(hObject,eventdata)user_string=get(hObject,'String');%后续处理代码其中,user_string为字符串类型,如果用户希望输入数值类型,则需要调用str2double函数对user_string进行转换,将字符串转换为数值。方法如下:user_value=str2double(user_string);2019/12/20listbox当列表框的Callback被触发时,其Value属性值为被选中的列表项的索引值,String属性值则是包含列表中所有条目的cell数组。functionlistbox1_Callback(hObject,eventdata)%取得被选中条目的索引值index_selected=get(hObject,'Value');%取得列表框中的所有条目,保存到list元胞数组中string_list=get(hObject,'String');%根据索引值获取所选中的列表条目item_selected=string_list{index_selected};2019/12/20popupmenu弹出式菜单的操作方法与列表框类似。functionpopupmenu1_Callback(hObject,eventdata)%取得被选中条目的索引值index_selected=get(hObject,'Value');%取得弹出式菜单中的所有条目,保存到list元胞数组中string_list=get(hObject,'String');%根据索引值获取所选中的条目,item_selected为字符串item_selected=string_list{index_selected};2019/12/20pushbuttonfunctionmyguihFig=figure('units','normalize','position',[0.40.40.30.2]);%创建按钮控件hButton=uicontrol('parent',hFig,'style','push','String','pushbutton','units','normalize','position',[0.30.40.40.2]);%设置按钮控件的Callback属性set(hButton,'Callback',@pushbutton1_Callback);%按钮的回调函数functionpushbutton1_Callback(hObject,eventdata)close(gcbf);2019/12/20radiobutton在单选按钮的回调函数内部,用户可以通过查询其Value属性值来确定单选按钮的当前状态。functionradiobutton1_Callback(hObject,eventdata)if(get(hObject,'Value')==get(hObject,'Max'))%单选按钮被选中,进行后续处理else%单选按钮未被选中,进行后续处理end2019/12/20slider滑动条的Max和Min属性值确定了滑动条变动范围,其SliderStep属性值确定了滑动条每次移动步长。SliderStep属性值形如[min_stepmax_step],min_step表示当用鼠标点击滑动条两端箭头时,滑动条移动数值;max_step表示当拖动滑动条滑块或者用鼠标点击滑块两侧时,滑动条移动数值。在回调函数内查询其Value属性值来取得滑动条当前指示数值。functionslider1_Callback(hObject,eventdata)%取得滑动条所指示的数值slider_value=get(hObject,'Value');%进行后续处理2019/12/20togglebutton在双位按钮回调函数中,用户需要编写代码查询其状态来决定进行操作。当按钮被按下时,将其Value属性值设置为Max的数值(Max的缺省值为1);双位按钮抬起时,MATLAB将其Value属性值设置为Min的数值(Min的缺省值为0)。functiontogglebutton1_Callback(hObject,eventdata)%取得其Value属性值button_state=get(hObject,'Value');ifbutton_state==get(hObject,'Max')%按钮被按下,进行后续处理elseifbutton_state==get(hObject,'Min')%按钮抬起,进行后续处理end例按钮的使用Matlab专用对话框Matlab提供了一些专用对话框,包括帮助、错误信息、信息提示、警告信息等。errordlg(‘errorstring’,’dlgname’):打开显示’errorstring’信息的错误信息对话框,对话框的标题由‘dlgname’指定。①错误信息对话框用于提示错误信息,函数为errordlg,其调用格式为:例errordlg('输入错误,请重新输入','错误信息')②帮助对话框用于帮助提示信息,函数为helpdlg,其调用格式为:helpdlg(‘helpstring’,‘dlgname’):打开显示‘errorstring’信息的帮助对话框,对话框的标题由‘dlgname’指定例helpdlg('矩阵尺寸必须相等','在线帮助')③输入对话框answer=inputdlg(prompt,title,lineNo):参数lineNo可以是标量、列矢量或m×2阶矩阵,若为标量,表示每个输入窗口的行数均为lineNo;若为列矢量,则每个输入窗口的行数由列矢量lineNo的每个元素确定;若为矩阵,每个元素对应一个输入窗口,每行的第一列为输入窗口的行数,第二列为输入窗口的宽度;answer=inputdlg(prompt,title,lineNo,defAns):参数defans为一个单元数组,存储每个输入数据的默认值,元素个数必须与prompt所定义的输入窗口数相同,所有元素必须是字符串;用于输入信息,函数为inputdlg,其调用格式为:prompt={'InputName','InputAge'};title='InputNameandAge';lines=[21]';def={'JohnSmith','35'};answer=inputdlg(prompt,title,lines,def);例创建两个输入窗口的输入对话框。④列表选择对话框用于在多个选项中选择需要的值,函数为listdlg,其调用格式为:[selection,ok]=listdlg(‘Liststring’,S,…)输出参数selection为一个矢量,