
matlab-GUI-编程.ppt
68页单击此处编辑母版标题样式,,单击此处编辑母版文本样式,,第二级,,第三级,,第四级,,第五级,,,,*,1,,,,,第,8,章,,GUI,编程,8.1 GUI,基础,8.1.1 GUI,介绍,GUI(Graphical User Interface ,MATLAB,图形用户界面,),编程是,MATLAB,编程应用的核心之一,,,是一种包含多种控件对象的图形窗口,,,可以支持用户进行交互操作GUI,控件包含菜单、工具栏、按钮、对话框等多种控件典型的,GUI,如图,8-1,所示2,,,,,图,8-1,一个典型的,GUI,,3,,,,,,8.1.2,创建,GUI,1.,在命令窗口输入,,>> guide,2.,单击,MATLAB,工具栏中的按钮,利用,1.,和,2.,两种方法得到界面如图,8-2,所示4,,,,,图,8-2 GUIDE,快速启动对话框,5,,,,,从,GUIDE,快速启动对话框,可以建立新的,GUI,,也可以打开已存在的,GUI,要打开当前路径下的,GUI,,也可以直接在命令窗口输入:,,>>guide filename,创建新的,GUI,,在图,8-2,中有四种选择6,,,,,(1) Blank GUI,,一个空的样板。
2)GUI with Uicontrols,,打开包含一些,Uicontrol,对象的,GUI,编辑器3)GUI with axes and Menu,,打开包含菜单栏和一些坐标轴图形对象的,GUI,编辑器4)Modal Question Dialog,,打开一个模态对话框的编辑器7,,,,,在四种选择中,一般采用默认的第一种,单击,ok,按钮后,进入,GUI,编辑界面,如图,8-3,所示在该图中,可以建立,GUI,图,8-3 GUI,编辑界面,8,,,,,由图,8-3,可知道,,GUI,编辑界面包含,GUI,对象选择区(窗口左边)、,GUI,工具栏、,GUI,布局区(窗口右边)、状态栏,4,部分GUI,对象选择区,如图,8-4,所示9,,,,,图,8-4 GUI,控件对象,10,,,,,GUI,工具栏,如图,8-5,所示图,8-5 GUI,工具栏,11,,,,,在图,8-5,中,各工具从左到右分别是: 对齐对象、菜单编辑器、,Tab,顺序编辑器、,M,文件编辑器、属性查看器、对象浏览器、运行界面在图,8-3,所示的界面中,可以用下面步骤创建,GUI,创建,GUI,对象,,添加控件,,编写回调函数,,执行,GUI,。
12,,,,,也可以在,M,文件中编写代码实现创建,GUI,例,8-1,创建如图,8-1,所示的,GUI,启动,GUIDE,,得到如图,8-2,所示界面,选择,Blank GUI,,点,ok,按钮,得到如图,8-3,所示界面,将三个按钮控件、一个坐标轴对象控件、一个弹出菜单控件、一个静态文本控件放入,GUI,布局窗口中,得到如图,8-6,所示界面13,,,,,图,8-6 GUI,设计界面,14,,,,,在图,8-6,中,利用属性查看器将三个按钮的,string,属性值分别修改为,surf,、,mesh,、,contour,,,将弹出菜单的,string,属性值修改为(分三行),Peaks,、,Membrane,、,Sinc,将,static text,的,string,属性值修改为,select Data,得到如图,8-7,的界面15,,,,,图,8-7,修改,string,属性的,GUI,,16,,,,,然后,打开,M,文件,创建如下回调函数,运行该文件,则得到图,8-1,的界面和结果function varargout = simple_gui(varargin),,gui_Singleton = 1;,,gui_State = struct('gui_Name', mfilename, ...,,'gui_Singleton', gui_Singleton, ...,,'gui_OpeningFcn', @simple_gui_OpeningFcn, ...,,'gui_OutputFcn', @simple_gui_OutputFcn, ...,,'gui_LayoutFcn', [] , ...,,'gui_Callback', []);,17,,,,,if nargin && ischar(varargin{1}),,gui_State.gui_Callback = str2func(varargin{1});,,end,if nargout,,[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});,,else,,gui_mainfcn(gui_State, varargin{:});,,end,18,,,,,function simple_gui_OpeningFcn(hObject, eventdata, handles, varargin),handles.peaks=peaks(35);,,handles.membrane=membrane;,,[x,y]=meshgrid(-8:.5:8);,,r=sqrt(x.^2+y.^2)+eps;,,sinc=sin(r)./r;,,handles.sinc=sinc;,,,19,,,,,handles.current_data=handles.peaks;,,surf(handles.current_data),handles.output = hObject;,,guidata(hObject, handles);,20,,,,,function varargout = simple_gui_OutputFcn(hObject, eventdata, handles),varargout{1} = handles.output;,21,,,,,function popupmenu1_Callback(hObject, eventdata, handles),val=get(hObject,'Value');,,str=get(hObject,'String');,,switch str{val};,,case 'peaks',,handles.current_data=handles.peaks;,,case 'membrane',,handles.current_data=handles.membrane ;,,case 'sinc',,handles.current_data=handles.sinc;,,end,,22,,,,,guidata(hObject,handles),function popupmenu1_CreateFcn(hObject, eventdata, handles),,if ispc,,set(hObject,'BackgroundColor','white');,,else,,set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));,,end,23,,,,,function surf_Callback(hObject, eventdata, handles),surf(handles.current_data);,24,,,,,function mesh_Callback(hObject, eventdata, handles),mesh(handles.current_data);,25,,,,,function contour_Callback(hObject, eventdata, handles),contour(handles.current_data);,,26,,,,,8.1.3,回调函数,回调函数是与,GUI,控件或,GUI,图框相关的函数,可以用来控制,GUI,及其控件对用户事件的响应行为,例如用户单击鼠标、移动鼠标、选取菜单时的响应等。
GUI,图框与,GUI,控件根据种类的不同,会带有不同的回调函数,每种回调函数都有响应的触发机制表,8-1,中为定义了触发机制的回调函数属性27,,,,,回调属性,触发事件,回调属性,触发事件,ButtonDownFcn,按下鼠标,offCallback,关闭切换按钮,Callback,控制动作,OnCallback,改变切换按钮,CellEditCallback,编辑表格单元,ResizeFcn,重置大小,CellSelectionCallback,单击表格单元,SelectionChangeFcn,改变单选按钮,ClickedCallback,控制动作,WindowButtonDownFcn,窗口按下鼠标,28,,,,,回调属性,触发事件,回调属性,触发事件,CloseRequestFcn,关闭窗口,WindowButtonMotionFcn,窗口移动鼠标,CreateFcn,控件初始化,WindowButtonUpFcn,松开鼠标,DeleteFcn,销毁控件,WindowKeyPressFcn,单击鼠标,KeyPressFcn,按下键盘键,WindowKeyReleaseFcn,释放鼠标,KeyReleaseFcn,松开键盘键,WindowScrollWheelFcn,滚轮滚动,29,,,,,8.2 GUI,控件,8.2.1 GUI,控件类型,GUI,控件见图,8-4,。
现用表,8-2,对它们作进一步说明30,,,,,控件对象,功能说明,Push Buttion,按钮,Slider,滑动框,Radio Button,单选按钮,Check Box,复选按钮,Edit Text,文本编辑框,Static Text,静态文本,Pop-up Menu,弹出式菜单,Listbox,列表框,Toggle Button,开关按钮:创建切换,Table,创建表格控件,Axes,坐标系对象,显示图形图像,Panel,面板,Button Group,按钮组,ActiveX Control,ActiveX,控件,在,GUI,中显示控件,31,,,,,8.2.2,创建,GUI,控件,1.GUI,方式,,前面的例,8-1,已经介绍,不再赘述2.,命令方式,,通过,uicontrol,函数可以创建控件对象,该函数的调用格式如下:,32,,,,,Handle=uicontrol(‘Name’,Value,…),,Handle=uicontrol(parent,’Name’,Value,…),,Handle=uicontrol,,,其中,,handle,是创建的控件对象的句柄值,,parent,是控件所在的上层图形对象的句柄值,,Name,是控件的属性名,,Value,是与属性名相对应的属性值。
33,,,,,例,8-2,使用,uicontrol,命令建立,GUI,控件对象在命令窗口中输入:,,>> figure,,>> hax=axes('Units','pixels'),;,,,>> surf(peaks),,>> uicontrol('Style','popup','String','jet|hsv|hot|cool|gray',...,,'Position',[20 340 100 50],'Callback',@setmap),,34,,,,,得到的结果如图,8-8,所示该图有一个弹出式菜单,图,8-8,添加弹出式菜单的,GUI,,35,,,,,在命令窗口中继续输入:,>> uicontrol('Style','pushbutton','String','Clear',...,,'Position',[20 20 50 20],'Callback','cla'),,得到的结果如图,8-9,所示该图有一个,clear,按钮,36,,,,,图,8-9,添加弹出式菜单和按钮的,GUI,37,,,,,在命令窗口中继续输入:,>> uicontrol('Style','slider','Min',1,'Max',50,'Value',41,...,,'Position',[400 20 120 20],'Callback',{@surfzlim,hax}),,,得到的结果如图,8-10,所示。
该图有一个滑动条38,,,,,图,8-10,添加弹出式菜单和按钮、滑动条的,GUI,39,,,,,在命令窗口中继续输入:,>> uicontrol('Style','text','Position',[400 45 120 20],...,,'String','Vertical Exaggeration'),得到的结果如图,8-11,所示该图有一个文本框40,,,,,图,8-11,添加弹出式菜单和按钮、滑动条、文本框的,GUI,41,,,,,8.3 GUI,菜单和工具栏,8.3.1 GUI,菜单,1.,菜单和菜单项,菜单和菜单项的建立函数为,uimenu,,格式如下,:,,Handle=uimenu(‘ProperTypeName’,PropertyValue,…),,Handle=uimenu(parent,‘ProperTypeName’,PropertyValue,…),,其中,, ProperTypeName,和,PropertyValue,的设置方式可以参考表,8-3,42,,,,,属性名,ProperTypeName,属性值,PropertyValue,说明,Checked,On,off,菜单项前是否添加复选框,Label,String,菜单标题名称,Separator,On,off,分隔符,Foregroundcolor,ColorSpec,文本颜色,Visible,On,off,菜单可见状态,Accelerator,character,键盘快捷键,Children,Vectorofhandles,子菜单句柄,Enable,Cancel,queueDefault:queue,分隔条,Parent,handle,父对象,Tag,String,对象标识符,43,,,,,属性名,ProperTypeName,属性值,PropertyValue,说明,Type,String(read-only),图形对象的类,UserData,matrix,用户指定的数据,Position,scalar,相对的,uimenu,的位置,BusyAction,Cancel,queue,回调函数中断,Callback,string,控制动作,CreatFcn,string,在对象生成中执行回调,DeleteFcn,string,在对象删除中执行回调,Interruptible,On,off,回调函数的中断方式,Handle Visibility,On,callback,off,在命令行或,GUI,中是否可见,44,,,,,例,8-3,用命令方式建立菜单。
f1=uimenu('Label',',演示,');,,uimenu(f1,'Label',',新图,','Callback','figure');,,uimenu(f1,'Label',',存盘,','Callback','save');,,uimenu(f1,'Label',',退出,','Callback','exit','Separator','on','Accelerator','Q');,f2=figure('MenuBar','None');,,mh=uimenu(f2,'Label',',查找,');,,frh=uimenu(mh,'Label',',查找与替换,...','Callback','goto');,45,,,,,frh=uimenu(mh,'Label',',变量,');,,uimenu(frh,'Label','Name...','Callback','Variable');,,uimenu(frh,'Label','Value...','Callback','Value');,得到的结果如图,8-12,所示46,,,,,图,8-12,建立菜单和菜单项,47,,,,,2.,右键菜单,右键菜单的创建函数为,uicontextmenu,。
格式如下:,,Handle=uicontextmenu(‘PropertyName’,PropertyValue,…),例,8-4,创建右键菜单,,hax=axes;,,plot(rand(20,3));,,%,定义右键菜单,,hcmenu=uicontextmenu;,48,,,,,%,定义右键菜单回调函数,hcb1=['set(goc,"LineStyle","--")'];,,hcb2=['set(goc,"LineStyle",":")'];,,hcb3=['set(goc,"LineStyle","-")'];,,item1=uimenu(hcmenu,'Label','dashed','Callback',hcb1);,,item2=uimenu(hcmenu,'Label','dotted','Callback',hcb2);,,item3=uimenu(hcmenu,'Label','solid','Callback',hcb3);,,,49,,,,,hlines=findall(hax,'Type','line');%,查找线对象,%,将右键菜单与线对象联系起来,,,for line=1:length(hlines),,set(hlines(line),'uicontextmenu',hcmenu),,end,得到的结果如图,8-13,所示。
50,,,,,图,8-13,上单击鼠标右键得到的菜单,51,,,,,8.3.2 GUI,工具栏,创建工具栏的函数为,uitoolbar,,格式如下:,,ht=uitoolbar(‘PropertyName1’,Value1, ‘PropertyName2’,Value2,…),例,8-5,创建工具栏,h=figure(‘ToolBar’,’none’) %,无工具栏,,ht=uitoolbar(h) %,建立空工具栏,52,,,,,8.4,对话框,8.4.1,对话框创建函数,,,MATLAB,中常用对话框创建函数如表,8-4,所示53,,,,,函数,说明,函数,说明,waitbar,显示等待进度条,helpdlg,帮助对话框,uigetfile,文件打开对话框,errordlg,错误消息对话框,uiputfile,保存文件对话框,msgbox,信息提示对话框,uisetfont,字体设置对话框,questdlg,询问对话框,uisetcolor,颜色设置对话框,warndlg,警告消息显示对话框,pagesetupdlg,页面设置对话框,inputdlg,变量输入对话框,printpreview,打印预览对话框,listdlg,列表选择对话框,printdlg,打印对话框,axlimdlg,生成坐标轴范围设置对话框,dialog,创建对话框或图形,,用户对象类型的图窗口,menu,菜单类型的选择对话框,54,,,,,8.4.2,对话框建立方法,1.,文件打开对话框,,代码设置如下:,,filename=uigetfile,,[FileName,PathName,FilterIndex]=uigetfile(FilterSpec),,[FileName,PathName,FilterIndex]=uigetfile(FilterSpec,DialogTitle),,[FileName,PathName,FilterIndex]=uigetfile(FilterSpec,DialogTitle,DefaultName),,得到的效果如图,8-14,所示。
55,,,,,图,8-14,文件打开对话框,56,,,,,2.,文件保存对话框,filename=uiputfile,,[FileName,PathName]=uiputfile,,[FileName,PathName,FilterIndex]=uiputfile(FilterSpec),,[FileName,PathName,FilterIndex]=uiputfile(FilterSpec,DialogTitle),,[FileName,PathName,FilterIndex]=uiputfile(FilterSpec,DialogTitle,DefaultName),,得到的效果如图,8-15,所示57,,,,,图,8-15,文件保存对话框,58,,,,,3.,颜色设置对话框,c=uisetcolor,,c=uisetcolor(['r' 'g' 'b']),,,4.,字体设置对话框,c=uisetfont,,,59,,,,,5.,帮助对话框,helpdlg,,helpdlg('Message'),,,显示的结果如图,8-16,所示,60,,,,,图,8-16,显示默认帮助对话框和显示给定帮助信息对话框,61,,,,,helpdlg('Message','DialogTitle'),显示的结果如图,8-17,所示,62,,,,,6.,信息提示对话框,调用格式如下:,,h=msgbox(Message),,h=msgbox(Message,Title),,h=msgbox(Message,Title,Icon),,h=msgbox(Message,Title,’custom’,IconData,IconCMap),,其中,,h,为返回的句柄;,Message,为显示的信息;,Title,为标题;,Icon,为图标;,IconData,为定义图标的数据;,IconCMap,存放颜色数据。
63,,,,,7.,数据输入对话框,调用格式如下:,,answ=inputdlg(prompt),,answ=inputdlg(prompt,dlg_title),,answ=inputdlg(prompt,dlg_title,num_lines),,answ=inputdlg(prompt,dlg_title,num_lines,defAns),,answ=inputdlg(prompt,dlg_title,num_lines,defAns,options),其中,返回值,answ,存储用户输入的变量值;,prompt,为提示文本;,title,为对话框标题;,num_lines,为可输入的行数;,defAns,为默认返回值;,options,设置可选项,64,,,,,例如,,prompt={',输入最大尺寸,:',',输入名字,:'};,,dlg_title='input';,,num_lines=1;,,def={'20','hsv'};,,answ=inputdlg(prompt,dlg_title,num_lines,def);,显示的结果如图,8-18,所示65,,,,,图,8-18,变量输入对话框,66,,,,,综合案例分析,用不同的函数、不同的线型、点型和颜色绘图,用文本框和按钮添加标题或清除标题。
界面如下图所示67,,,,,68,,,,,源代码见,e541.m,,界面见,e541.fig,,。