《第5章图形用户界面GUI编程》由会员分享,可在线阅读,更多相关《第5章图形用户界面GUI编程(158页珍藏版)》请在金锄头文库上搜索。
1、图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/22合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院图形用户界面编程图形用户界面编程山山 东东 省省 计计 算算 中中 心心刘焕进刘焕进E-mail: 图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/22主要内容主要内容 图形对象图形对象 图形用户界面的设计原则和步骤图形用户界面的设计原则和步骤 图形用户界面的开发方法图形用户界面的开发方法 直接编写直接编写M文件开发图形用户界
2、面文件开发图形用户界面 利用利用GUIDE工具开发图形用户界面工具开发图形用户界面 典型案例介绍典型案例介绍 图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/22第一节第一节 图形对象图形对象图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/22 1 1、图形对象:、图形对象: MATLABMATLAB用来显示数据和创建图形用户界面的基本元素。用来显示数据和创建图形用户界面的基本元素。例如:程序界面上的按钮、菜单、工具条等。例如:程序界面
3、上的按钮、菜单、工具条等。 2 2、图形对象的标识:、图形对象的标识: 使用使用“句柄句柄”来标识每一个图形对象的来标识每一个图形对象的实例实例。通过句。通过句柄,用户就可以找到相应图形对象的各项属性,进而修改柄,用户就可以找到相应图形对象的各项属性,进而修改这些属性,以产生不同的图形呈现效果。这些属性,以产生不同的图形呈现效果。 一、图形对象的概念一、图形对象的概念图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/22 如右图所示的图形用户界面如右图所示的图形用户界面包括如下图形对象:包括如下图形对象:(1 1)一
4、个)一个坐标轴坐标轴,用来在其中,用来在其中绘图;绘图;(2 2)一个)一个弹出式菜单弹出式菜单,列出,列出MATLABMATLAB中的三个函数:中的三个函数:peakspeaks、membranemembrane和和sincsinc;(3 3)一个)一个静态文本框静态文本框,提示用,提示用户选择弹出式菜单项;户选择弹出式菜单项;(4 4)三个)三个下压按钮下压按钮,用来调用,用来调用相应的绘图命令来绘制图形。相应的绘图命令来绘制图形。图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/22二、二、 图形对象的类型图形
5、对象的类型1. 图形对象的层次关系图形对象的层次关系 根据图形对象之间的依赖关系,根据图形对象之间的依赖关系,MATLABMATLAB将所有图形对象将所有图形对象组织在一个组织在一个树形结构的层次关系表树形结构的层次关系表中中 ,如下图所示。处在,如下图所示。处在树形结构上层的对象是下层对象的树形结构上层的对象是下层对象的父对象父对象;处在树形结构下处在树形结构下层的对象是上层对象的层的对象是上层对象的子对象子对象。 例如:例如:axes对象是对象是figure对象的子对象,或者说对象的子对象,或者说figure对对象是象是axes对象的父对象。对象的父对象。图形用户界面编程图形用户界面编程
6、刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/22对象类型对象类型父对象父对象对象描述对象描述根对象根对象root无无对应于计算机的屏幕对应于计算机的屏幕图形窗口对象图形窗口对象figureroot屏幕上的一个图形窗口,句柄值是整数,在窗口的标题中给出,屏幕上的一个图形窗口,句柄值是整数,在窗口的标题中给出,如如1、2、3、坐标轴坐标轴axesfigure在图形窗口中定义一个图形区域,用来描述子对象的位置和方向在图形窗口中定义一个图形区域,用来描述子对象的位置和方向用户控件用户控件uicontrolfigure用户界面控制。当用户点击对象时,用户
7、界面控制。当用户点击对象时,MATLAB完成一个相应的完成一个相应的动作动作用户菜单用户菜单uimenufigure创建一个窗口菜单,用户使用菜单来控制程序运行创建一个窗口菜单,用户使用菜单来控制程序运行现场菜单现场菜单uicontextmenufigure创建与图形对象关联的快捷菜单创建与图形对象关联的快捷菜单图像图像imageaxes用当前的色图矩阵定义一个图像。图像可以有自己的色图用当前的色图矩阵定义一个图像。图像可以有自己的色图灯光灯光lightaxes影响补片和曲面对象的光源影响补片和曲面对象的光源线条线条lineaxes使用使用plot、plot3、contour和和contour
8、3等函数创建的一些简单等函数创建的一些简单的图形的图形补片补片patchaxes创建有边界的填充多边形创建有边界的填充多边形矩形矩形rectangleaxes从椭圆到矩形变化的二维形状从椭圆到矩形变化的二维形状曲面曲面surfaceaxes将数据作为将数据作为x-y平面高度创建的三维矩阵数据描述平面高度创建的三维矩阵数据描述文本文本textaxes字符串,它的位置由其父对象来指定字符串,它的位置由其父对象来指定2、MATLAB图形对象种类图形对象种类 图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/22 在进行图形
9、用户界面编程时,用户最关心的是电脑屏幕的在进行图形用户界面编程时,用户最关心的是电脑屏幕的尺寸,用户需要根据电脑屏幕的尺寸(通常用像素点来表示)尺寸,用户需要根据电脑屏幕的尺寸(通常用像素点来表示)来确定图形窗口的尺寸大小。来确定图形窗口的尺寸大小。【例例】在命令窗口中输入命令以查询计算机屏幕的尺寸在命令窗口中输入命令以查询计算机屏幕的尺寸【注】计算机屏幕是一个根对象计算机屏幕是一个根对象(root)(root)。在。在MATLABMATLAB中,可以中,可以使用使用setset和和getget命令来设置它的属性。通常,命令来设置它的属性。通常,rootroot对象的所有对象的所有属性都采用默
10、认值,用户不必进行修改。属性都采用默认值,用户不必进行修改。 rootroot对象的句柄值为对象的句柄值为0 0。 get(0,Units) %取得表示屏幕尺寸的单位,默认为像素(取得表示屏幕尺寸的单位,默认为像素(pixels)ans =pixels get(0,ScreenSize) %取得屏幕的尺寸,为取得屏幕的尺寸,为1280800像素点像素点ans = 1 1 1280 800图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/22三、三、 图形对象的属性图形对象的属性 图形对象的属性图形对象的属性可以控制对
11、象的外观和行为等许多方面的性可以控制对象的外观和行为等许多方面的性质。质。 对象的属性既包括对象的属性既包括对象的一般信息对象的一般信息,例如对象的类型、父对,例如对象的类型、父对象和子对象等;又包括象和子对象等;又包括对象的特定的、独一无二的信息对象的特定的、独一无二的信息,例如,例如figurefigure对象中对鼠标控制的对象中对鼠标控制的WindowButtonDownFcnWindowButtonDownFcn、WindowButtonMotionFcnWindowButtonMotionFcn等属性。等属性。 MATLAB MATLAB将图形对象的信息组织成一个将图形对象的信息组织
12、成一个层次表层次表,并将这些信息,并将这些信息储存在该对象的属性中。例如,储存在该对象的属性中。例如,rootroot属性表包括当前图形窗口属性表包括当前图形窗口的句柄和当前的指针位置;的句柄和当前的指针位置;figurefigure属性表包括其子对象的列表属性表包括其子对象的列表并始终跟踪窗口中发生的特定事件,等等。并始终跟踪窗口中发生的特定事件,等等。图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/22 一些属性对于所有的图形对象来说具有相同的含义。下表一些属性对于所有的图形对象来说具有相同的含义。下表列出了图
13、形对象的这些共有的属性。列出了图形对象的这些共有的属性。对象类型对象类型对象描述对象描述BusyAction控制控制MATLAB处理特定对象回调函数中断的方法。如果处理特定对象回调函数中断的方法。如果Interruptible设置为设置为off,BusyAction可以有下面几种情况:可以有下面几种情况:queue:此为缺省值。表示将回调函数的中断请求放入一个挂起队列中直到对象的:此为缺省值。表示将回调函数的中断请求放入一个挂起队列中直到对象的回调函数完成;回调函数完成;cancel:忽略其它回调函数所有可能的中断:忽略其它回调函数所有可能的中断ButtonDownFcn定义用鼠标左键点击图形
14、对象时执行的回调函数定义用鼠标左键点击图形对象时执行的回调函数Children保存对象的所有子对象句柄的向量保存对象的所有子对象句柄的向量Clipping图形对象显示模式。图形对象显示模式。on(缺省值):只显示在坐标轴界限内的部分图形对象;(缺省值):只显示在坐标轴界限内的部分图形对象;off:同时显示坐标轴界限内外的部分同时显示坐标轴界限内外的部分CreateFcn创建图形对象时执行的回调函数,常用缺省值创建图形对象时执行的回调函数,常用缺省值DeleteFcn用户销毁图形对象时执行的回调函数用户销毁图形对象时执行的回调函数HandleVisibility控制对象句柄的访问方式。控制对象句
15、柄的访问方式。on:(缺省值),总是可以访问;:(缺省值),总是可以访问;callback:只有回调函数或者调用回调函数的函数可以访问,这样可以防止用户从:只有回调函数或者调用回调函数的函数可以访问,这样可以防止用户从命令行中对图形对象进行修改,以防止误操作;命令行中对图形对象进行修改,以防止误操作;off:不可访问。:不可访问。图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/22Interruptible决定回调函数是否可以被随后调用的回调函数中断,有决定回调函数是否可以被随后调用的回调函数中断,有on和和off
16、两个值可以设置两个值可以设置Parent该对象的父对象的句柄该对象的父对象的句柄Selected该对象是否被选中,可以设置为该对象是否被选中,可以设置为on或或offSelectionHighlight定义对象是否使用可见方式表明被选中状态,可以设置为定义对象是否使用可见方式表明被选中状态,可以设置为on(缺省(缺省值)或者值)或者offTag用户用来标识对象的字符串用户用来标识对象的字符串Type对象的类型,是对象的类型,是figure、axes、line或者或者text等等UserData是一个矩阵,包含用户要在对象中保存的数据。矩阵数据并不被对象本是一个矩阵,包含用户要在对象中保存的数据
17、。矩阵数据并不被对象本身使用身使用UIContextMenu和对象相关联的现场菜单句柄。当在对象上点击鼠标右键时,将显示出和对象相关联的现场菜单句柄。当在对象上点击鼠标右键时,将显示出现场菜单现场菜单Visible决定对象是否可见,值可以为决定对象是否可见,值可以为on或者或者off续前表:续前表:图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/22 MATLAB为所有对象都设置了为所有对象都设置了缺省值缺省值。用户在创建图形对。用户在创建图形对象时,如果没有指定其属性值,则象时,如果没有指定其属性值,则MATLA
18、B会使用对象的系会使用对象的系统缺省属性值来创建对象。可以在命令窗口中使用统缺省属性值来创建对象。可以在命令窗口中使用get命令来命令来查询这些缺省的属性值,查询这些缺省的属性值,所有缺省属性值均以所有缺省属性值均以factory开头,开头,表示其表示其“出厂出厂”设置设置。【例例】查询出厂设置查询出厂设置get(0,factory)ans = factoryFigureAlphamap: 1x64 double factoryFigureBusyAction: queue factoryFigureButtonDownFcn: factoryFigureClipping: on factor
19、yFigureCloseRequestFcn: closereq factoryFigureColor: 0 0 0 factoryFigureColormap: 64x3 double .图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/22 用户不仅可以用户不仅可以查询查询当前任意图形对象的属性值,而且可以当前任意图形对象的属性值,而且可以设设置置对象的大多数属性值(某些属性被设置为对象的大多数属性值(某些属性被设置为“只读只读”,用户只,用户只能查询,不能修改)。能查询,不能修改)。 属性值只属性值只对对象的特
20、定实例起作用对对象的特定实例起作用,即修改对象的属性值,即修改对象的属性值不会对同类对象、不同实例的属性值产生影响。例如,修改不会对同类对象、不同实例的属性值产生影响。例如,修改坐标轴坐标轴1的刻度值,坐标轴的刻度值,坐标轴2的刻度值则不会受影响,等等。的刻度值则不会受影响,等等。 由于是层次结构,所以由于是层次结构,所以某个对象的属性改变时,会影响到某个对象的属性改变时,会影响到这个结构中它以下的对象这个结构中它以下的对象。例如,如果使用鼠标改变图形窗。例如,如果使用鼠标改变图形窗口在电脑屏幕上的位置,线条和坐标轴对象的位置也随之改口在电脑屏幕上的位置,线条和坐标轴对象的位置也随之改变。变。
21、 有两种方法可以用来修改对象的属性值:有两种方法可以用来修改对象的属性值:一种是在创建对一种是在创建对象的时候设置;另一种是在创建完成后,通过获得对象的句柄,象的时候设置;另一种是在创建完成后,通过获得对象的句柄,调用调用setset函数来修改对象的属性值。函数来修改对象的属性值。图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/22【例例】查询图形对象的属性值查询图形对象的属性值可以通过如下命令查询当前图形对象的缺省属性值。可以通过如下命令查询当前图形对象的缺省属性值。 h=gcf; %取得当前图形窗口的句柄取得当
22、前图形窗口的句柄 get(h) %取得当前图形窗口的缺省属性值取得当前图形窗口的缺省属性值结果如下所示:结果如下所示:Alphamap = (1 by 64) double arrayBackingStore = onCloseRequestFcn = closereq %关闭窗口时调用的回调函数关闭窗口时调用的回调函数Color = 0.8 0.8 0.8 %窗口的背景颜色窗口的背景颜色Colormap = (64 by 3) double arrayCurrentAxes = %当前坐标轴,为当前坐标轴,为(空)表示还未创建坐标轴(空)表示还未创建坐标轴CurrentCharacter =
23、 CurrentObject = CurrentPoint = 0 0 %鼠标当前的位置鼠标当前的位置图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/22【例例】修改窗口的颜色为蓝色修改窗口的颜色为蓝色,去掉,去掉figure 1figure 1标识,并将窗标识,并将窗口的名称设置为口的名称设置为“my first figure”my first figure”。 h=gcf; %取得当前图形窗口的句柄取得当前图形窗口的句柄 set(h,color,0 0 1); %修改其背景颜色为蓝色修改其背景颜色为蓝色 set
24、(h,numbertitle,off); %去掉去掉figure的数字编号的数字编号 set(h,name,my first figure); %设置设置figure的名称的名称图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/22四、四、 图形对象的操作图形对象的操作 每一种类型的图形对象都有一个相应的每一种类型的图形对象都有一个相应的创建函数创建函数,这个,这个创建函数使用户能够创建这一类对象的一个实例。创建函数使用户能够创建这一类对象的一个实例。 除了在除了在“绘图与可视化绘图与可视化”这一章中提到的二维绘图函
25、数这一章中提到的二维绘图函数(如(如plotplot)、三维绘图函数(如)、三维绘图函数(如plot3plot3)和特殊绘图函数(如)和特殊绘图函数(如stemstem)等函数外,图形窗口对象、坐标轴、用户控件、用户)等函数外,图形窗口对象、坐标轴、用户控件、用户菜单、工具条和现场菜单创建函数以及对句柄的菜单、工具条和现场菜单创建函数以及对句柄的操作函数操作函数列列于下表中于下表中。1、图形对象操作函数、图形对象操作函数图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/22函数名称函数名称功能描述功能描述figure
26、创建图形窗口创建图形窗口axes创建坐标轴创建坐标轴line创建线条创建线条uicontrol创建用户界面控件创建用户界面控件uimenu创建用户界面菜单创建用户界面菜单uicontextmenu创建图形对象的右键弹出式菜单创建图形对象的右键弹出式菜单uitoolbar创建在图形窗口顶部显示的工具条创建在图形窗口顶部显示的工具条uipushtool在工具条上创建下压按钮在工具条上创建下压按钮uitoggletool在工具条上创建开关按钮在工具条上创建开关按钮uipanel在图形窗口上创建面板对象在图形窗口上创建面板对象uibuttongroup在图形窗口上创建按钮组对象在图形窗口上创建按钮组对
27、象图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/22set设置对象的属性设置对象的属性get获取对象的属性获取对象的属性findobj根据对象的属性值查找对象的句柄根据对象的属性值查找对象的句柄delete删除对象删除对象gco获取当前鼠标所点击的对象的句柄获取当前鼠标所点击的对象的句柄gcbo获取当前回调函数对应的对象的句柄获取当前回调函数对应的对象的句柄gcf获取当前图形窗口对象的句柄获取当前图形窗口对象的句柄gca获取当前坐标轴对象的句柄获取当前坐标轴对象的句柄clf清空当前图形窗口上的对象清空当前图形窗口
28、上的对象cla清除当前坐标轴上的对象清除当前坐标轴上的对象close关闭当前窗口关闭当前窗口Copyobj拷贝图形对象拷贝图形对象图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/22 gco、gcbo、gcf和和gca是是get函数的助记符,其含义如下:函数的助记符,其含义如下:(1)gco回当前图形窗口对象的回当前图形窗口对象的CurrentObject属性值,相当于属性值,相当于get(gcf,CurrentObject);(2)gcbo返回根对象的返回根对象的CallbackObject属性值,相当于属性值,
29、相当于get(0,CallbackObject);(3)gcf返回根对象的返回根对象的CurrentFigure属性值,相当于属性值,相当于get(0,CurrentFigure);(4)gca返回当前图形窗口对象的返回当前图形窗口对象的CurrentAxes属性值,相当于属性值,相当于get(gcf,CurrentAxes)2、常用助记符、常用助记符3、常用操作函数:、常用操作函数:set和和get 在在MATLABMATLAB中,有两个基本命令用来处理图形对象:中,有两个基本命令用来处理图形对象:getget和和setset。通过使用这两个命令,可以。通过使用这两个命令,可以设置和修改指定
30、对象的属性值。设置和修改指定对象的属性值。 图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/22【例例】利用利用setset和和getget来设置和查询图形对象的属性来设置和查询图形对象的属性set(fh,Pointer) %Pointer属性标识鼠标指针的形状,属性标识鼠标指针的形状,arrow表示默认的指针形状表示默认的指针形状 crosshair | fullcrosshair | arrow | ibeam | watch | topl | topr | botl | botr | left | top |
31、 right | bottom | circle | cross | fleur | custom | hand (1)查看图形窗口对象的大小和位置的度量单位)查看图形窗口对象的大小和位置的度量单位%使用缺省的属性创建一个图形窗口对象使用缺省的属性创建一个图形窗口对象fh=figure;get(fh,units) %查看度量单位查看度量单位ans =pixels(2)改变窗口的大小和位置)改变窗口的大小和位置%将窗口的左下角移动到点(将窗口的左下角移动到点(200,300)处,大小设置为)处,大小设置为400300像素点像素点set(fh,Position,200 300 400 300);可
32、以看到可以看到,图形窗口在屏幕上的位置和大小均发生了改变。,图形窗口在屏幕上的位置和大小均发生了改变。(3)查看可以设置的鼠标指针的形状)查看可以设置的鼠标指针的形状图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/22【例例】 图形对象操作简单示例程序程序运行界面如下图所示:程序运行界面如下图所示:图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/22示例程序中的几点注意事项:示例程序中的几点注意事项:示例程序中的几点注意事项:示例程序中
33、的几点注意事项:1. 关于函数关于函数M文件文件 代码的起始部分有如下语句代码的起始部分有如下语句“function = ex5_4()”function = ex5_4()”,此语句表明将该文件声明为,此语句表明将该文件声明为函数函数M M文件文件,functionfunction是声明函是声明函数数M M文件时必须使用的关键字,文件时必须使用的关键字,ex5_4ex5_4为函数的名称,为函数的名称,()()和和内分别包含函数的输入和输出参数,为空表示函数不带输入内分别包含函数的输入和输出参数,为空表示函数不带输入和输出参数。和输出参数。如果函数需要输入和输出参数,可以这样声明:如果函数需要
34、输入和输出参数,可以这样声明:function out1,out2,. = ex5_4(in1,in2,.)function out1,out2,. = ex5_4(in1,in2,.)函数的输入和输出参数的个数不受限制函数的输入和输出参数的个数不受限制。图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/222.关于结构变量关于结构变量S 程序中的变量程序中的变量S S定义为结构体,又称为定义为结构体,又称为“句柄结构句柄结构”,该,该结构体包含了界面上所有图形对象的句柄,这样做的目的有结构体包含了界面上所有图形对象
35、的句柄,这样做的目的有两个:一是为了代码的简洁,二是便于各图形对象的句柄在两个:一是为了代码的简洁,二是便于各图形对象的句柄在各回调函数之间的传递。这是编程时的习惯做法。各回调函数之间的传递。这是编程时的习惯做法。S.fhS.fh、S.textS.text、S.popS.pop和和S.axesS.axes是是结构体结构体S S的字段的字段,分别保存,分别保存图形窗口对象的句柄、文本对象的句柄、弹出式菜单对象的图形窗口对象的句柄、文本对象的句柄、弹出式菜单对象的句柄和坐标轴对象的句柄。句柄和坐标轴对象的句柄。图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业
36、大学机械与汽车工程学院. 2024/9/223.弹出式菜单的弹出式菜单的Callback属性属性 在在MATLABMATLAB中,将图形对象的中,将图形对象的CallbackCallback属性设置为属性设置为函数句函数句柄的形式柄的形式,可以将主函数和回调函数的代码保存到同一个函,可以将主函数和回调函数的代码保存到同一个函数数M M文件中。每一个函数文件中。每一个函数M M文件都只有一个主函数,这个主函文件都只有一个主函数,这个主函数位于文件的开头,其余函数都是子函数。数位于文件的开头,其余函数都是子函数。在示例程序中,设置弹出式菜单的回调函数为在示例程序中,设置弹出式菜单的回调函数为myc
37、allbackmycallback,并把句柄结构并把句柄结构S S作为参数传递给它作为参数传递给它,以方便在子函数中通过,以方便在子函数中通过句柄结构对界面上的图形对象进行控制。例如,可以使用句柄结构对界面上的图形对象进行控制。例如,可以使用setset命令来改变线条对象的颜色属性,等等。命令来改变线条对象的颜色属性,等等。图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/224.图形对象的图形对象的Position属性属性 figurefigure、axesaxes、texttext和和popupmenupopup
38、menu等图形对象都有等图形对象都有PositionPosition属性,用来确定图形对象的位置和大小。属性,用来确定图形对象的位置和大小。 Position Position定义了一个矩形区域,来确定图形对象的位置定义了一个矩形区域,来确定图形对象的位置和大小:和大小: rect = left, bottom, width, height rect = left, bottom, width, height leftleft和和bottombottom表示图形对象矩形区域的左下角在其父对象表示图形对象矩形区域的左下角在其父对象中的坐标,中的坐标,figurefigure的父对象是电脑屏幕(的
39、父对象是电脑屏幕(rootroot对象),对象),axesaxes、texttext和和popupmenupopupmenu的父对象是的父对象是figurefigure。widthwidth和和 heightheight确定确定了矩形区域的宽度和高度。了矩形区域的宽度和高度。图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/22 下图标识了下图标识了figurefigure窗口在屏幕上的位置窗口在屏幕上的位置,其左下角相对于,其左下角相对于屏幕的左下角的位置矢量如图中的红色屏幕的左下角的位置矢量如图中的红色“”型虚线
40、所示;界型虚线所示;界面上的面上的EditEdit控件相对于控件相对于figurefigure窗口的位置矢量如图中的黑色窗口的位置矢量如图中的黑色“*”“*”型虚线所示;文本框和坐标轴的位置也在图中做了标注。型虚线所示;文本框和坐标轴的位置也在图中做了标注。图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/225.曲线的曲线的Color属性属性 在在 MATLABMATLAB的的 帮帮 助助 文文 件件 中中 , LineLine对对 象象 的的 ColorColor属属 性性 值值 为为ColorSpecColor
41、Spec。ColorSpecColorSpec指指的的是是在在MATLABMATLAB中中定定义义颜颜色色的的三三种种方方式:式:RGBRGB三元素行向量三元素行向量;简称简称;全称全称。 RGB RGB向量中个元素的取值在向量中个元素的取值在0101之间,分别表示之间,分别表示redred(红色)(红色)、greengreen(绿色)和(绿色)和blueblue(蓝色)所占的比重。(蓝色)所占的比重。MATLABMATLAB中有中有8 8中预定义的颜色,列于下表中。中预定义的颜色,列于下表中。图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽
42、车工程学院. 2024/9/22RGB值值简称简称全称全称含义含义1 0 0Rred红色红色0 1 0Ggreen绿色绿色0 0 1Bblue蓝色蓝色0 1 1Ccyan青绿色青绿色1 0 1mmagenta紫红色紫红色1 1 0yyellow黄色黄色1 1 1wwhite白色白色0 0 0kblack黑色黑色图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/226.使用使用propedit属性编辑器编辑图形对象的属性属性编辑器编辑图形对象的属性 除除了了使使用用setset和和getget命命令令来来设设置置和和查
43、查询询图图形形对对象象的的属属性性外外,MATLABMATLAB还还提提供供了了一一个个图图形形用用户户界界面面的的属属性性编编辑辑器器,利利用用它它可可方便地对图形用户界面上对象的属性进行设置修改。方便地对图形用户界面上对象的属性进行设置修改。 在命令窗口中输入下列命令,即可显示属性编辑器。在命令窗口中输入下列命令,即可显示属性编辑器。propeditpropedit图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/22下图是属性编辑器的界面。下图是属性编辑器的界面。Figure NameFigure Name是显
44、示在窗口标题栏中的名称;是显示在窗口标题栏中的名称;Show Figure NumberShow Figure Number如果被勾选,则在窗口的名称前显示窗口的编号,图如果被勾选,则在窗口的名称前显示窗口的编号,图中的中的Figure 2Figure 2:ex5_4ex5_4;ColormapColormap表示图形窗口使用的色图矩阵,有表示图形窗口使用的色图矩阵,有1313种预种预定义的色图矩阵,此外,用户可以定义自己的色图矩阵;点击定义的色图矩阵,此外,用户可以定义自己的色图矩阵;点击More More Properties.Properties.按钮,可以打开按钮,可以打开Inspec
45、torInspector窗口,用户可以查看和修改更多窗口,用户可以查看和修改更多的属性值;的属性值;Export SetupExport Setup按钮可以导出设置好的按钮可以导出设置好的figurefigure窗口并可以保存为窗口并可以保存为.fig.fig、.bmp.bmp、.jpg.jpg等图片文件。等图片文件。图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/22第二节第二节 图形用户界面的图形用户界面的设计原则和步骤设计原则和步骤图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学
46、院合肥工业大学机械与汽车工程学院. 2024/9/221 1简单性简单性一、一、图形用户界面设计原则图形用户界面设计原则设计界面时,应力求简洁、直接、清晰地体现出界面的功能设计界面时,应力求简洁、直接、清晰地体现出界面的功能和特征。和特征。只在界面上显示最终的、最关键的、最重要的信息只在界面上显示最终的、最关键的、最重要的信息,以保持界面的整洁。以保持界面的整洁。要正确地使用图形的表达能力。要正确地使用图形的表达能力。设计界面时要合理地采用图设计界面时要合理地采用图形表示形表示,滥用图形表示有时会造成画面混乱,反而不便于用,滥用图形表示有时会造成画面混乱,反而不便于用户使用。户使用。设计界面应
47、设计界面应尽量减少窗口数目尽量减少窗口数目,力求避免在不同窗口之间进,力求避免在不同窗口之间进行来回切换。行来回切换。图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/222 2一致性一致性 人机界面的一致性主要体现在人机界面的一致性主要体现在输入、输出方面的一致性输入、输出方面的一致性。具体是指在应用程序的不同部分,甚至不同的应用程序之间,具体是指在应用程序的不同部分,甚至不同的应用程序之间,具有相似的界面外观和不具,相似的人机交互方式以及相似具有相似的界面外观和不具,相似的人机交互方式以及相似的信息显示格式等。的
48、信息显示格式等。例如:例如:凡是下拉菜单或者弹出式菜单都凡是下拉菜单或者弹出式菜单都有同样的结构和操作方法;各种类型信息(包括结果信息、有同样的结构和操作方法;各种类型信息(包括结果信息、提示信息、错误信息、帮助信息等)都在确定的屏幕位置和提示信息、错误信息、帮助信息等)都在确定的屏幕位置和以相似的格式显示等。以相似的格式显示等。 一致性原则有助于用户学习,减少用户的学习量和记忆量,一致性原则有助于用户学习,减少用户的学习量和记忆量,有助于用户将局部的经验知识推广到其它的场合下应用。有助于用户将局部的经验知识推广到其它的场合下应用。图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学
49、机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/223 3熟悉性熟悉性 设计新的图形界面时,设计新的图形界面时,应尽量使用人们所熟悉的标志和符应尽量使用人们所熟悉的标志和符号号。用户可能并不了解新界面的具体含义及操作方法,但。用户可能并不了解新界面的具体含义及操作方法,但完全可以根据自己所熟悉的标志来摸索界面的使用。完全可以根据自己所熟悉的标志来摸索界面的使用。 4 4系统要给用户提供反馈信息系统要给用户提供反馈信息 要通过图形界面及时对用户的操作作出反应,要通过图形界面及时对用户的操作作出反应,给出反馈信给出反馈信息息,以便于用户确定其操作是否正确,操作的结果是什么。,以便
50、于用户确定其操作是否正确,操作的结果是什么。如果执行某个命令或功能需要耗费较长的时间,需要如果执行某个命令或功能需要耗费较长的时间,需要给出给出操作完成剩余的时间等信息操作完成剩余的时间等信息,便于用户及时掌握程序运行,便于用户及时掌握程序运行的进度。同时,系统可以的进度。同时,系统可以允许用户中断正在进行的运算允许用户中断正在进行的运算。图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/225 5用户界面应具有容错能力用户界面应具有容错能力 在用户输入、调试运行程序时难免会出错,此外,计算在用户输入、调试运行程序时
51、难免会出错,此外,计算机的软件或硬件系统也可能出错。因此,机的软件或硬件系统也可能出错。因此,用户界面应具有容用户界面应具有容错能力,应能及时给出出错信息,出错信息应清楚、易理解。错能力,应能及时给出出错信息,出错信息应清楚、易理解。同时,用户界面应具有保护功能,防止因用户的误操作而破同时,用户界面应具有保护功能,防止因用户的误操作而破坏系统的运行状态和信息存储坏系统的运行状态和信息存储。 此外,图形用户界面此外,图形用户界面应提供帮助功能应提供帮助功能,便于用户学习和,便于用户学习和使用系统,等等。使用系统,等等。图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学
52、院合肥工业大学机械与汽车工程学院. 2024/9/221 1确定对界面的要求和使用环境确定对界面的要求和使用环境 二、二、图形用户界面设计步骤图形用户界面设计步骤 一一个个图图形形用用户户界界面面的的优优劣劣,很很大大程程度度上上取取决决于于用用户户的的使使用用评评价价。因因此此,在在系系统统开开发发的的最最初初阶阶段段,尤尤其其要要重重视视系系统统界界面面部部分分的的用用户户需需求求,了了解解用用户户的的技技能能和和经经验验,综综合合考考虑虑系系统统直直接接的的或或潜潜在在的的用用户户需需求求,同同时时要要考考虑虑图图形形用用户户界界面面运运行行所所必必需需的的软、硬件环境软、硬件环境。图形
53、用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/222 2分析界面功能,明确设计任务分析界面功能,明确设计任务 在设计界面之前,需要仔细考虑界面的外观和要完成的功能。在设计界面之前,需要仔细考虑界面的外观和要完成的功能。可可以以围围绕绕“信信息息输输入入- -信信息息处处理理- -信信息息输输出出”这这样样一一条条主主线线,理理清清哪哪些些信信息息或或参参数数是是需需要要通通过过图图形形界界面面输输入入,以以何何种种方方式式输输入入;在在程程序序运运行行过过程程中中会会产产生生哪哪些些中中间间信信息息,哪哪些些中中间间
54、信信息息是是有有必必要要呈呈现现给给用用户户的的;程程序序运运行行结结束束后后会会产产生生哪哪些些结结果果,这些结果以何种方式在界面上体现。这些结果以何种方式在界面上体现。图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/223 3建立界面模型建立界面模型 根根据据系系统统的的功功能能以以及及输输入入、输输出出信信息息,选选择择合合适适的的控控件件,对对界界面面进进行行合合理理的的布布局局,构构建建图图形形用用户户界界面面草草图图,并并反反复复推推敲敲、修改,直至获得满意的效果。修改,直至获得满意的效果。 4 4根据
55、界面模型完成图形界面的开发根据界面模型完成图形界面的开发 根根据据确确定定的的界界面面模模型型,选选择择合合适适的的界界面面开开发发方方法法,逐逐步步细细化化完成界面的开发完成界面的开发。图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/22第三节第三节开发图形用户界面的方法开发图形用户界面的方法 图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/22两种开发图形用户界面程序的方法:两种开发图形用户界面程序的方法:一是以基本的一是以基本的M
56、ATLABMATLAB程序开发为主,直接编写程序开发为主,直接编写M M文件;文件;二是以鼠标为主通过二是以鼠标为主通过MATLABMATLAB提供的提供的GUIDEGUIDE集成开发环境进行。集成开发环境进行。图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/221 1简介简介 一、一、直接编写直接编写M文件的方法文件的方法该该方方法法以以句句柄柄图图形形(Handle Handle GraphicsGraphics)的的概概念念为为基基础础,依依据据前前面面所所讲讲的的图图形形对对象象的的相相关关知知识识,通通过
57、过编编写写MATLABMATLAB代代码码,调调用用图图形形对对象象的的操操作作函函数数来来创创建建、操操作作图图形形对对象象,设设置置图图形形对对象象的的有有关关属属性性,定定义义有有关关图图形形对对象象的的相相关关回回调调函函数数,开开发发出出满足要求的图形用户界面。满足要求的图形用户界面。2 2特点特点 以以编编写写纯纯代代码码的的形形式式进进行行的的,需需要要用用户户熟熟练练掌掌握握图图形形对对象象的相关知识,需要较多的编程技巧。的相关知识,需要较多的编程技巧。 图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/
58、9/22过过程程比比较较明明晰晰,代代码码编编写写较较为为灵灵活活,代代码码执执行行效效率率高高,整整个程序个程序只包含一个只包含一个M文件文件。 用用户户需需要要事事先先对对界界面面的的格格式式及及布布局局进进行行细细致致的的规规划划,尤尤其其是是要要准准确确计计算算各各图图形形对对象象在在界界面面上上的的位位置置,以以便便正正确确确确定定其其Position属属性性的的值值。可可能能需需要要多多次次修修改改代代码码以以修修改改对对象象的的属属性性值值,以以便便得得到到满满意意的的图图形形界界面面效效果果,需需要要占占用用较较多多的的开发时间开发时间。 图形用户界面编程图形用户界面编程 刘焕
59、进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/221 1简介简介 二、二、利用利用MATLAB提供的提供的GUIDE界面开发工具界面开发工具 GUIDE(Graphical User Interface Development Environment)是是MATLAB提供的一个专门用于提供的一个专门用于GUI程序设计的程序设计的快速开发环境快速开发环境。 GUIDE是是一一个个界界面面设设计计工工具具集集,MATLAB将将所所有有GUI支支持持的的用用户户控控件件都都集集成成在在这这个个开开发发环环境境中中,并并提提供供界界面面外外观观、属属性性和和
60、事事件件响响应应方方式式的的设设置置方方法法。用用户户不不需需要要编编写写任任何何代代码码,即即可可以以通通过过鼠鼠标标的的简简单单拖拖拽拽就就能能迅迅速速地地产产生生各各种种GUI控控件件,并并可可以以根根据据要要求求方方便便地地修修改改它它们们的的外外形形、大大小小、颜颜色等属性,从而帮助用户方便地设计出各种符合要求的图形用户界面。色等属性,从而帮助用户方便地设计出各种符合要求的图形用户界面。 GUIDE界面如下图所示。界面如下图所示。图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/22MATLAB R2008
61、a MATLAB R2008a 的的GUIDEGUIDE界面界面 图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/222 2生成的文件类型生成的文件类型 (1) FIG文件文件 该文件包括该文件包括GUI图形窗口及其上所有控件的完整的描述,图形窗口及其上所有控件的完整的描述,包括所有对象的属性值。包括所有对象的属性值。FIG文件是一个文件是一个二进制文件二进制文件,在用户打开,在用户打开GUI时,时,MATLAB自动读取自动读取FIG文件来重新构造图形窗口及其所有控文件来重新构造图形窗口及其所有控件。所有对象的属性
62、都被设置为图形窗口创建时保存的属性。件。所有对象的属性都被设置为图形窗口创建时保存的属性。可以使用可以使用open、openfig和和hgload命令来打来后缀为命令来打来后缀为.fig的的FIG文件。文件。图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/22(2) M文件文件 该该文文件件包包括括GUI设设计计、控控制制函函数数以以及及定定义义为为子子函函数数的的用用户户控控件件回回调调函函数数,主主要要用用于于控控制制GUI打打开开时时的的各各种种特特征征。该该M文文件件的的内内容容包包括括两两部部分分:GUI
63、初初始始化化和和控控件件的的回回调调函函数数。当当用用户户与与GUI进进行行交交互互操操作作时时,程程序序将将调调用用相相应应的的回回调调函函数数来来处处理用户的操作。理用户的操作。图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/223 3特点特点 同直接编写同直接编写M文件的方法相比,该方法有如下优点:文件的方法相比,该方法有如下优点:开发图形界面直观、便捷、所见即所得,自动生成的开发图形界面直观、便捷、所见即所得,自动生成的M文件文件中包含程序所需要的一些有用的函数代码(如初始化函数中包含程序所需要的一些有用的
64、函数代码(如初始化函数OpeningFcn和输出函数和输出函数OutputFcn等),无需用户自行编写。等),无需用户自行编写。可以使用可以使用M文件生成的有效方法来管理图形对象句柄(即文件生成的有效方法来管理图形对象句柄(即句句柄结构柄结构handles),并执行回调函数子程序。),并执行回调函数子程序。可以自动插入可以自动插入回调函数的原型回调函数的原型,用户只需要编写回调函数的,用户只需要编写回调函数的具体实现代码即可。具体实现代码即可。图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/224 4开发步骤开发步
65、骤 利用利用GUIDE工具来实现一个图形用户界面包括以下两项工作:工具来实现一个图形用户界面包括以下两项工作:GUI界面设计和界面设计和GUI控件编程。整个控件编程。整个GUI的实现过程可以分为的实现过程可以分为如下几步:如下几步:根据需要设置根据需要设置GUIDE开发环境。通过菜单开发环境。通过菜单File-Preferences菜单项来完成。菜单项来完成。使用界面设计编辑器进行使用界面设计编辑器进行GUI界面设计。界面设计。编写用户编写用户GUI控件的回调函数代码。控件的回调函数代码。图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程
66、学院. 2024/9/22第四节第四节 直接编写直接编写M文件开发图形用户文件开发图形用户界面界面 图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/22一、一、 M文件的类型文件的类型1、两种、两种M文件文件脚本文件(脚本文件(MATLAB scripts)和和函数文件(函数文件(MATLAB functions)。2、两种、两种M文件的区别文件的区别 脚本脚本M文件文件不包含函数声明行,没有输入参数和输出参数;不包含函数声明行,没有输入参数和输出参数;函数函数M文件文件是是以函数声明行以函数声明行“functio
67、n .”作为开始的,可以包括输入参数和输出参数。作为开始的,可以包括输入参数和输出参数。 脚本脚本M文件文件中的变量全部存在于基本工作空间(中的变量全部存在于基本工作空间(Base Workspace)中,用)中,用户可以在命令窗口中直接访问基本工作空间中的变量;在户可以在命令窗口中直接访问基本工作空间中的变量;在函数函数M文件文件中使用中使用的变量的作用域是局部的,只局限于函数空间(的变量的作用域是局部的,只局限于函数空间(Function Workspace)内部,)内部,用户不能在命令窗口中直接访问函数空间中的变量;用户不能在命令窗口中直接访问函数空间中的变量; MATLAB编译器编译器
68、V4.3(MATLAB 7.1)版本及其之前的版本只能编译(使)版本及其之前的版本只能编译(使用用mcc命令)函数命令)函数M文件,不能编译脚本文件,不能编译脚本M文件。文件。图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/223、将脚本、将脚本M文件转换为函数文件转换为函数M文件文件 若将脚本若将脚本M文件转换为函数文件转换为函数M文件,只需在文件的起始处添加关键字文件,只需在文件的起始处添加关键字function,并指定函数的名称(例如,并指定函数的名称(例如myfunc)即可。函数)即可。函数M文件运行后,在
69、文件运行后,在命令窗口中仍然显示变量命令窗口中仍然显示变量t的数值,但在基本工作空间中就不会看到变量的数值,但在基本工作空间中就不会看到变量m和和t了。了。【例例】将脚本将脚本M文件转换为函数文件转换为函数M文件文件(1)脚本)脚本M文件的代码:文件的代码:m = magic(4); % 产生把产生把4x4的魔方矩阵的魔方矩阵t = m . 3; % 将将m中的每个元素求三次方中的每个元素求三次方disp(t); % 在命令窗口中显示在命令窗口中显示t的值的值(2)转换后的)转换后的M文件见文件见ex54_1.m,其代码为:,其代码为:%函数函数M文件,不包含输入参数和输出参数文件,不包含输入
70、参数和输出参数function myfuncm = magic(4); % 产生把产生把4x4的魔方矩阵的魔方矩阵t = m . 3; % 将将m中的每个元素求三次方中的每个元素求三次方disp(t); % 在命令窗口中显示在命令窗口中显示t的值的值图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/22二、二、使用脚本使用脚本M文件编写的文件编写的GUI程序程序%创建界面窗口,不包含工具条创建界面窗口,不包含工具条h0=figure(toolbar,none,. position,200 150 450 250,.
71、name,ex54_2,. numbertitle,off);%在窗口中绘制正弦曲线在窗口中绘制正弦曲线x=0:0.5:2*pi;y=sin(x);h=plot(x,y);grid on%创建静态文本控件创建静态文本控件hm=uicontrol(h0,style,text,. string,. 绘图函数绘图函数,. position,380 180 50 20);%创建弹出式菜单控件创建弹出式菜单控件hm=uicontrol(h0,style,popupmenu,. string,. sin(x)|cos(x)|sin(x)+cos(x),. position,380 150 50 20);%
72、设置弹出式菜单的第一项为默认选项设置弹出式菜单的第一项为默认选项set(hm,value,1)图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/22%定义弹出式菜单的定义弹出式菜单的Callback,为字符数组,为字符数组my_callback=. v=get(hm,value);,. switch v,. case 1,. delete(h),. y=sin(x);,. h=plot(x,y);,. grid on,. case 2,. delete(h),. y=cos(x);,.h=plot(x,y);,. g
73、rid on,. case 3,. delete(h),. y=sin(x)+cos(x);,. h=plot(x,y);,. grid on,. end;%设置弹出式菜单的设置弹出式菜单的callback属性值属性值set(hm,callback,my_callback);%设置坐标轴的位置和大小,坐标轴对象的设置坐标轴的位置和大小,坐标轴对象的units属性缺省值为属性缺省值为normalizedset(gca,position,0.2 0.2 0.6 0.6);图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/
74、22图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/22三、根对象三、根对象rootroot根对象是与根对象是与计算机屏幕计算机屏幕相对应的图形对象。相对应的图形对象。只有一个根对象只有一个根对象,根对象没有父对象,根对象的子对象是,根对象没有父对象,根对象的子对象是图形窗口对象。图形窗口对象。根对象的句柄值为根对象的句柄值为0,在,在MATLAB中可以通过中可以通过set和和get来设来设置和获取根对象的一些属性。置和获取根对象的一些属性。当用户启动当用户启动MATLAB时,根对象就存在了。因此,时,根对象就存在
75、了。因此,根对象根对象不需要用户来创建,用户也不能销毁根对象不需要用户来创建,用户也不能销毁根对象。1 1、根对象的性质、根对象的性质图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/222、根对象常用属性和方法、根对象常用属性和方法属性和方法名称属性描述CallbackObject只读。包含正在执行的回调函数的对象的句柄。如果没有回调函数在执行,则其值为(空)Children包含所有属性HandleVisibility为on的子对象的句柄CommandWindowSize只读。包含命令窗口的尺寸,如138 39Cu
76、rrentFigure当前图形对象的句柄。如果不存在当前图像对象,则返回(空)Diary允许用户将命令窗口所有的键盘输入以及大部分输出内容保存到日记文件中。值可以取on或off(缺省值)DiaryFile日记文件的名称。缺省名称为DiaryCreateFcn创建图形对象时执行的回调函数,常用缺省值Echo当执行脚本M文件时,是否在命令窗口中显示文件的每一行内容。值可以取on或off(缺省值)ErrorMessage其值为MATLAB最近一次错误信息的字符串FixedWidthFontName当axes、text和uicontrol对象Format控制命令窗口中数字的显示格式。可以选择的值有:s
77、hort | long | shortE | longE | shortG | longG | hex | bank | + | rational | debug | shortEng | longEng,缺省值为shortEFormatSpacing其值为控制MATLAB命令窗口中输出内容的行间隔的字符串,可以为loose(缺省值)和compactMonitorPositions包含第一显示器和第二显示器的尺寸图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/22续前表:续前表:More控制命令窗口中的内容的多屏显
78、示Parent根对象没有父对象PointerLocation鼠标指针相对于屏幕左下角的位置,以像素(pixels)为单位PointerWindow鼠标指针所在的图形窗口的句柄,如果鼠标不在任何图形窗口中,则其值为0ScreenDepth只读。显示器的颜色深度,即每个像素多少位ScreenPixelsPerInch显示器的分辨率,即每英寸代表多少像素ScreenSize只读。由四个元素组成的屏幕位置和尺寸向量ShowHiddenHandles控制所有图形对象的句柄的可访问性,使各自的HandleVisibility属性失效,其值为on和off(缺省值)Tag用户设置的用来标识根对象的字符串。(其
79、实用户可以不用设置其tag属性,因为根对象的句柄总为0,可以方便使用)Type对象的类型,其值为rootUnits大小和位置的度量单位,可选用下列单位:pixels(标准) 屏幕像素normalized 屏幕宽度和高度归一化处理inches 英寸centimeters 厘米points 打印机的点,等于0.353毫米characters 字符UserData用户要在根对象中保存的数据Visible决定对象是否可见,值可以为on或者off图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/22BusyAction、But
80、tonDownFcn、Clipping、CreateFcn、DeleteFcn、HandleVisibility、HitTest、Interruptible、Selected、SelectionHighlight、UicontextMenu、Visible。以下属性对根对象是不起作用的:以下属性对根对象是不起作用的:图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/22【例例1】设置命令窗口中数字的显示格式设置命令窗口中数字的显示格式 3 3、根对象的操作方法举例、根对象的操作方法举例%设置命令窗口中数字的显示格式为
81、有理式设置命令窗口中数字的显示格式为有理式rationalset(0,Format,rational) %或者使用命令或者使用命令format rationala=133/444a = 133/444%设置命令窗口中数字的显示格式为设置命令窗口中数字的显示格式为short set(0,format,short) aa = 0.2995图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/22【例例2】查询屏幕尺寸和修改度量单位查询屏幕尺寸和修改度量单位 get(0,units) %查询屏幕尺寸的度量单位查询屏幕尺寸的度量
82、单位ans =pixelsget(0,screensize) %获取以像素为单位的屏幕尺寸获取以像素为单位的屏幕尺寸ans = 1 1 1280 800 set(0,units,inch) %设置屏幕尺寸的度量单位为英寸设置屏幕尺寸的度量单位为英寸 get(0,screensize) % 获取以英寸为单位的屏幕尺寸获取以英寸为单位的屏幕尺寸ans = 0 0 13.3333 8.3333 get(0,ScreenPixelsPerInch) %查询屏幕分辨率查询屏幕分辨率ans = 96图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学
83、院. 2024/9/22【例例3】设置命令窗口中输出内容的行间隔设置命令窗口中输出内容的行间隔 get(0,FormatSpacing) %属性值为属性值为loose,行与行之间有间隔,行与行之间有间隔ans =loose set(0,FormatSpacing,compact) get(0,FormatSpacing) %属性值为属性值为compact,行与行之间没有间隔,行与行之间没有间隔ans =compact图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/22【例例4】控制命令窗口内容的分屏显示控制命令窗口
84、内容的分屏显示 如果在命令窗口中显示的内容超出命令窗口的范围,用户可以设置根对象的如果在命令窗口中显示的内容超出命令窗口的范围,用户可以设置根对象的more属性值来实属性值来实现分屏显示。现分屏显示。 set(0,more,on) %或者调用命令或者调用命令more on set(0)CurrentFigureDiary: on | off DiaryFileEcho: on | off FixedWidthFontNameFormat: short | long | shortE | longE | shortG | longG | hex | bank | + | rational | d
85、ebug | shortEng | longEng FormatSpacing: loose | compact LanguageMore: on | off -more- 用户可以按用户可以按Enter键实现逐行滚动显示,或按空格键实现逐屏键实现逐行滚动显示,或按空格键实现逐屏滚动显示。滚动显示。图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/22四、图形窗口对象四、图形窗口对象 figurefigure图图形形窗窗口口对对象象就就是是计计算算机机屏屏幕幕上上的的一一个个图图形形窗窗口口,它它的的父父对对象象是是
86、计计算算机机屏屏幕幕,即即root对对象象。因因此此,图图形形窗窗口口对对象象继继承承了了root对对象象的的很很多多属属性性。属属性性可可以以在在图图形形窗窗口口对对象象创创建建时时修修改改,也可以通过也可以通过set命令来修改。命令来修改。1 1、图形窗口对象的性质、图形窗口对象的性质2 2、图像窗口对象常用属性和方法图像窗口对象常用属性和方法 属性名称属性描述BeingDeleted指示窗口对象是否正被删除。如果窗口对象的删除回调函数(见DeleteFcn)被调用,则MATLAB自动设置该属性为on,表明窗口正在被删除。off是其默认属性值CloseRequestFcn图形窗口关闭时执行
87、的回调函数,缺省为closereq图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/22续前表:续前表: Color图形窗口的背景颜色,见ColorSpecColormap供曲面、图像和补片对象使用的色图矩阵CurrentAxes正在用来绘图的当前坐标轴的句柄,见gcaCurrentCharacter包含在图形窗口中最后一个按下的键盘字符键CurrentObject包含在图形窗口中鼠标选中的最后一个对象的句柄,见gcoCurrentPoint鼠标最后一次按下时指针的位置,格式为x yDockControls是否允许图
88、形窗口停靠到MATLAB桌面上,值为on(缺省)或offFileNameGUI的FIG文件名,用来保存GUI的布局信息IntegerHandle控制句柄是以整数值还是浮点数值来标识,值为on(缺省)或offKeyPressFcn在当前窗口中按下键盘按键时的回调函数,用来处理键盘输入KeyReleaseFcn在当前窗口中释放键盘按键时的回调函数,用来处理键盘输入MenuBar控制是否在图形窗口的顶部显示MATLAB菜单,值为none(不显示菜单)或figure(缺省,显示菜单)Name图形窗口的标题,缺省为空NextPlot在图形窗口中新图的绘制方式,其值为:new: 创建新的图形窗口或在指定的
89、其它窗口中显示图形add: (缺省值)在当前图形窗口中显示图形replace:在绘图前,将除位置属性外的所有其它图形对象的属性设置为缺省值,并删除所有子对象(相当于clf reset)replacechildren:删除所有子对象,但不重置窗口对象(相当于clf)NumberTitle在图形窗口的标题中加上图形编号,如figure 1、figure 2、等。Pointer在图形窗口中,鼠标指针的形状,缺省为arrow。其值可以为下列之一:crosshair | arrow | watch | topl | topr | botl | botr | circle | cross | fleur
90、| left | right | top | bottom | fullcrosshair | ibeam | customPointerShapeCData1616的矩阵,表示用户自定义的鼠标指针形状图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/22续前表:续前表: Position图形窗口在屏幕上的位置和大小,其值为left bottom width heightUnits图形窗口位置和大小属性值的度量单位。其值可以为:inches、centimeters、normalized(缺省值)、points、pix
91、els和characters,见root属性。WindowStyle图形窗口的形式,其值可以为:normal: (缺省值)modal: 所有的鼠标或键盘输入都被限制在图形窗口内docked:图形窗口停靠到MATLAB桌面上Resize决定是否允许用户用鼠标拖动窗口的右下角以改变大小,其值为on(缺省值)或offResizeFcn当窗口改变大小时调用的回调函数SelectionType确定鼠标左右键的单击或双击选择,其值为:normal:(缺省值)表示单击鼠标左键extend: shift键+鼠标左键或中间键alternate:control键+鼠标左键或右键open:双击鼠标左键ToolBar
92、控制是否在图形窗口显示工具条。其值为:none:不显示工具条auto:显示工具条,但当在窗口中添加图形用户控件(uicontrol)时移除工具条figure:始终显示工具条UIContextMenu与图像窗口相联的现场菜单的句柄WindowButtonDownFcn在图形窗口中按下鼠标键时执行的回调函数WindowButtonMotionFcn鼠标指针在图形窗口中移动时执行的回调函数WindowButtonUpFcn在图形窗口内释放鼠标键时执行的回调函数图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/223 3、图
93、形窗口对象的操作举例、图形窗口对象的操作举例【例例】图形窗口对象的操作方法图形窗口对象的操作方法创建一图形窗口,去掉数字标题,将其标题改为创建一图形窗口,去掉数字标题,将其标题改为“example window”,隐去图形窗口的标准菜单栏,显示图形窗口的标,隐去图形窗口的标准菜单栏,显示图形窗口的标准工具条,并将图形窗口对象的准工具条,并将图形窗口对象的units属性设置为属性设置为normalized,并设置其位置和大小。,并设置其位置和大小。function mygui%使用缺省属性值创建图形窗口使用缺省属性值创建图形窗口hf=figure;%设置图形窗口的部分属性值设置图形窗口的部分属性
94、值set(hf,toolbar,figure,menubar,none,numbertitle,off,. name,example window,units,normalized,position,0.3 0.4 0.6 0.5);图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/22图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/22五、坐标轴对象五、坐标轴对象 axesaxes坐坐标标轴轴对对象象可可以以在在图图形形窗窗口口中中定定
95、义义绘绘图图的的区区域域,其其父父对对象象是是图图形形窗窗口口对对象象,而而线线条条、图图像像、补补片片和和文文本本对对象象等等是是它它的的子对象子对象。在同一个图形窗口对象中可以有多个坐标轴对象。在同一个图形窗口对象中可以有多个坐标轴对象。1 1、坐标轴对象的性质、坐标轴对象的性质2 2、坐标轴对象的常用属性和方法、坐标轴对象的常用属性和方法图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/22续前表:续前表:FontAngle指定坐标轴文本字体的倾斜角度,其值可以为normal(缺省值)、italic和 obli
96、que。italic和 oblique指定了倾斜的字体FontName坐标轴文本所使用的字体FontSize指定字体的大小。使用FontUnits中的单位FontUnitsFontSize中使用的字体大小单位,其值可以为:inches、centimeters、normalized、points(缺省值)和pixelsFontWeight坐标轴文本加黑。其值可以为:normal(缺省值)、light、bold和demiGridLineStyle坐标轴中的栅格所使用的线型,可以为:“-”、“”、“:”、“-.”和“none”,缺省值为“:”LineWidthx、y和z坐标轴的宽度,缺省值为0.5点
97、,1点=1/72英寸NextPlot指定在坐标轴内绘制新图形的方式,其值为:“add” 使用已存在的坐标轴来绘制图形“replace” (缺省值)删除坐标轴的所有子对象,并重新设置除Position属性外的所有属性值,等同于cla reset命令“replace children” 删除所有子对象,但不重新设置坐标轴的属性值,等同于cla命令图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/22续前表:续前表:Position指定坐标轴在图形窗口中的位置和大小,其值为位置向量left bottom width hei
98、ght,left和bottom表示坐标轴左下角相对于图形窗口左下角的位置,width和height表示坐标轴的宽度和高度Title指定坐标轴的标题文本Units坐标轴位置和大小属性值的度量单位。见figure属性XAxisLocationx轴的刻度标记和x轴标签的位置,其值可以为:top和bottom(缺省值)YAxisLocationy轴的刻度标记和y轴标签的位置,其值可以为:right和left(缺省值)XColorYColorZColorx轴、y轴和z轴的颜色。在x、y和z轴防线的刻度标记、数字文本和栅格线都是这种颜色XGridYGridZGrid是否在x轴、y轴和z轴方向绘制栅格线,其
99、值为on或off(缺省值)XLabelYLabelZLabelx轴、y轴和z轴的标签XLimYLimZLim设置x轴、y轴和z轴的最大和最小值XTickYTickZTick指定x轴、y轴和z轴的刻度标记,为数字XTickLabelYTickLabelZTickLabel指定x轴、y轴和z轴的刻度标记,为数字文本字符串图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/223 3、坐标轴对象的操作举例、坐标轴对象的操作举例在图形窗口中创建坐标轴,并在坐标轴中绘制曲线。在图形窗口中创建坐标轴,并在坐标轴中绘制曲线。%创建坐
100、标轴对象创建坐标轴对象haxes=axes(parent,hf,position,0.1 0.1 0.5 0.8);%初始化绘图数据初始化绘图数据x=0:pi/50:2*pi;y=sin(x);%指定当前坐标轴指定当前坐标轴axes(haxes);%绘制图形绘制图形plot(x,y,b*);%设置坐标轴的文本为倾斜,设置坐标轴的文本为倾斜,x轴的轴的颜色为红色颜色为红色set(gca,fontangle,italic,xcolor,1 0 0);%打开栅格打开栅格grid on%给坐标轴对象添加标题给坐标轴对象添加标题title(我建立的第一个坐标轴我建立的第一个坐标轴);%给给x和和y轴添加
101、标签轴添加标签xlabel(x坐标轴坐标轴);ylabel(y坐标轴坐标轴);图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/22图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/22六、用户界面控件对象六、用户界面控件对象 下压按钮(下压按钮(pushbutton):):通过鼠标点击按钮可以实现按钮的压通过鼠标点击按钮可以实现按钮的压下,并调用相应的回调函数来完成某项事务。下,并调用相应的回调函数来完成某项事务。双位按钮(双位按钮(to
102、gglebutton):):点击按钮将使按钮保持按下或弹起状点击按钮将使按钮保持按下或弹起状态,两种情况下可分别调用不同的回调函数来完成不同的事务。态,两种情况下可分别调用不同的回调函数来完成不同的事务。单选按钮(单选按钮(radiobutton):):单选按钮通常以组为单位,一组单选单选按钮通常以组为单位,一组单选按钮之间是一种互斥的关系,任一时刻一组单选按钮只能有一个按按钮之间是一种互斥的关系,任一时刻一组单选按钮只能有一个按钮有效。钮有效。复选框(复选框(checkbox):):复选框通常也以组为单位,但某一时刻多个复选框通常也以组为单位,但某一时刻多个复选框可以同时有效。复选框可以同时
103、有效。编辑框(编辑框(edit):):用户可以在编辑框中输入文本数据。编辑框的属用户可以在编辑框中输入文本数据。编辑框的属性性Max和和Min用来控制是否允许多行输入,如果用来控制是否允许多行输入,如果Max-Min1,则可,则可以在编辑框中输入多行内容。此外,用户也可以利用编辑框来显示以在编辑框中输入多行内容。此外,用户也可以利用编辑框来显示程序运行的结果。程序运行的结果。1 1、MATLABMATLAB所支持的用户界面控件类型所支持的用户界面控件类型(R2008aR2008a)图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院.
104、2024/9/22静态文本(静态文本(text):):通常作为其它控件的标签,用户不能通过静态文通常作为其它控件的标签,用户不能通过静态文本来输入程序运行的参数或调用相应的回调函数。本来输入程序运行的参数或调用相应的回调函数。滑动条(滑动条(slider):):用户可以通过滑动条来改变指定范围内的数值输用户可以通过滑动条来改变指定范围内的数值输入,滑动条的位置代表用户输入的数值。入,滑动条的位置代表用户输入的数值。列表框(列表框(listbox):):列表框显示由其列表框显示由其string属性定义的一组选项,用属性定义的一组选项,用户可以选择其中的一项或多项。列表框的属性户可以选择其中的一项
105、或多项。列表框的属性Max和和Min用来控制选用来控制选择模式:如果择模式:如果Max-Min1,则允许多项选择;如果,则允许多项选择;如果Max-Min1,则只,则只允许单项选择。允许单项选择。弹出式菜单(弹出式菜单(popupmenu):):弹出式菜单可以打开并显示一个由其弹出式菜单可以打开并显示一个由其string属性定义的一组选项,弹出式菜单不像列表框那样有滑动条,它属性定义的一组选项,弹出式菜单不像列表框那样有滑动条,它减少了对图形窗口空间的占用。减少了对图形窗口空间的占用。框架(框架(frame):):框架是图形窗口中的一个可见的、封闭的矩形区域,框架是图形窗口中的一个可见的、封闭
106、的矩形区域,它把一组互相关联的控件(例如一组单选按钮等)组合在一起,使得它把一组互相关联的控件(例如一组单选按钮等)组合在一起,使得用户界面更容易理解。框架没有相关联的回调函数。目前,框架一般用户界面更容易理解。框架没有相关联的回调函数。目前,框架一般由面板(由面板(uipanel)和组合框()和组合框(uibuttongroup)来代替。)来代替。 图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/222 2、用户界面控件常用属性和方法、用户界面控件常用属性和方法属性名称属性描述BackgroundColor是一个
107、RGB三元数组或MATLAB预定义的颜色,用于设置对象的背景颜色Callback用户激活控件时运行的回调函数。但用户不可交互控制frame和text的回调函数CData指定一个RGB值的mn3的矩阵,表示在pushbutton或togglebutton上显示的真彩图像Enable决定当用户用鼠标点击控件时,控件是否可用及其动作,其值为:on:(缺省值)表示控件可用,鼠标点击时执行其Callbackinactive:控件处于非活动状态,鼠标点击时不执行其Callback,而是执行其ButtonDownFcnoff:控件标题变灰,鼠标点击时执行其ButtonDownFcnForegroundCol
108、or是一个RGB三元数组或MATLAB预定义的颜色,用于设置其文本String的颜色HorizontalAlignment对象的文本String的水平排列方式,其值为left、center(缺省值)或rightKeyPressFcn当控件有输入焦点时,按下键盘按键执行的回调函数ListboxTop只对列表框控件有效,表示将列表框中的哪一项放在列表框的最上面Max指定控件的Value属性的最大值,取决于控件的类型:togglebutton、radiobutton和checkbox:当控件被选中时,其Value值设置为Maxslider:滑动条可选择的最大值,Max要大于Min,Max的缺省值为1
109、edit:当Max-Min1时,文本框接受多行输入;当Max-Min1时,文本框接受单行输入listbox:当Max-Min1时,可以选择列表框的多个选项;当Max-Min 1时,只能选择列表框的单个选项popupmenu、pushbutton和text控件不使用这个属性图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/22续前表:续前表:Min指定控件的Value属性的最小值,取决于控件的类型:togglebutton、radiobutton和checkbox:当控件未被选中时,其Value值设置为Minslide
110、r:滑动条可选择的最小值,Min值要小于Max的值,Min的缺省值为0edit:当Max-Min1时,文本框接受多行输入;当Max-Min 1时,文本框接受单行输入listbox:当Max-Min1时,可以选择列表框的多个选项;当Max-Min 1时,只能选择列表框的单个选项popupmenu、pushbutton和text控件不使用这个属性Position位置向量left bottom width height,表示控件在图形窗口中的位置String控件的标签、列表框的选项、弹出式菜单的选项Style指定控件的类型。其值可以为pushbutton(缺省值)、 togglebutton、rad
111、iobutton、checkbox、edit、text、 slider、frame、 listbox或 popupmenuSliderStepslider控件的属性,其值为min_step max_step,表示每次滑动条移动所改变的最小值和最大值TooltipString用户将鼠标移动到控件上时显示的提示字符串Units位置属性值的单位,见root对象Value不同类型的对象,其Value属性值不同:togglebutton、radiobutton和checkbox:见Max和Minslider:滑动条的当前值popupmenu、listbox:表示哪些选项被选中edit、pushbutto
112、n和text的Value属性无效Visible确定控件是否可见,其值可以为:on:(缺省值)表示控件可见off:表示控件不可见图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/223 3、用户界面控件编程要点、用户界面控件编程要点(1 1)如何设置控件的相关事件的回调函数如何设置控件的相关事件的回调函数每个用户界面控件都有若干个回调函数,用来对用户触发每个用户界面控件都有若干个回调函数,用来对用户触发的不同事件做出响应。的不同事件做出响应。Callback、ButtonDownFcn和和KeyPressFcn等分别表
113、示当用户选中控件、在控件上点击等分别表示当用户选中控件、在控件上点击鼠标和按下键盘按键时调用的回调函数。如果用户需要处鼠标和按下键盘按键时调用的回调函数。如果用户需要处理这些事件,就需要设置和定义这些回调函数。因此,用理这些事件,就需要设置和定义这些回调函数。因此,用户首先需要了解定义这些回调函数需要遵循的语法规则。户首先需要了解定义这些回调函数需要遵循的语法规则。如果回调函数执行的语句较少,可在创建控件时直接如果回调函数执行的语句较少,可在创建控件时直接将语句赋值给其回调函数将语句赋值给其回调函数 【例例】定义下压按钮定义下压按钮pushbutton的的Callback属性,将要执行的语句用
114、属性,将要执行的语句用“ ”和和“”符符号括起来,作为号括起来,作为Callback的属性值。的属性值。内的每条命令必须用两个单引号内的每条命令必须用两个单引号“”“”括起来,括起来,每条语句之间必须用逗号每条语句之间必须用逗号“,”隔开。(见隔开。(见ex54_8.m)图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/22function DefineCallback%创建图形窗口对象创建图形窗口对象hFig= figure(units,normalize,. position,0.4 0.4 0.3 0.2);%
115、创建下压按钮对象,设置其创建下压按钮对象,设置其Callback属性属性uicontrol(parent,hFig,. style,pushbutton,. String,Execute Callback,. units,normalize,. position,0.4 0.4 0.3 0.2,. callback,figure;,. x = 0:pi/20:2*pi;,. y = sin(x);,. plot(x,y););运行效果图:运行效果图:程序代码:程序代码:图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9
116、/22如果事件的处理较复杂,执行的语句较多,可以将控件的回调如果事件的处理较复杂,执行的语句较多,可以将控件的回调函数的代码写到单独的函数内函数的代码写到单独的函数内 在这种情况下,在这种情况下,MATLAB对定义回调函数有严格的语法规则,对定义回调函数有严格的语法规则,用户必须按照这些规则来定义回调函数。定义回调函数的语法用户必须按照这些规则来定义回调函数。定义回调函数的语法规则如下表所列,表中内容是以定义规则如下表所列,表中内容是以定义pushbutton的的Callback为为例。例。如何设置对象的Callback属性如何定义回调函数set(hObject,Callback,myfile
117、)function myfileset(hObject, Callback ,myfile)function myfile(obj, event)set(hObject, Callback ,myfile,5,6)function myfile(obj,event,arg1,arg2)set(hObject, Callback ,myfile,5,6)function myfile(obj,event,arg1,arg2)图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/22在第一种情况下,回调函数没有输入参数,在第
118、一种情况下,回调函数没有输入参数,回调函数必须保存成单独的回调函数必须保存成单独的M文件文件。在第二种情况下,对象在第二种情况下,对象hObject的的Callback属性设置为函数句柄的形式。这种情况属性设置为函数句柄的形式。这种情况下,回调函数下,回调函数myfile必须带两个参数:必须带两个参数:obj表示调用该回调函数的对象的句柄,如表示调用该回调函数的对象的句柄,如pushbutton的句柄;的句柄;event是个结构体,其中包含了事件的信息。这时的是个结构体,其中包含了事件的信息。这时的回调函数可回调函数可以是单独的函数以是单独的函数M文件,也可以写在主函数文件,也可以写在主函数M
119、文件内文件内。在第三种情况下,对象在第三种情况下,对象hObject的的Callback属性设置为属性设置为myfile,5,6,回调函数不仅,回调函数不仅必须带必须带obj和和event两个参数,而且还包含了用户需要传递的其它参数。其中,用户传两个参数,而且还包含了用户需要传递的其它参数。其中,用户传递的参数的个数不受限制。这时,递的参数的个数不受限制。这时,回调函数也必须保存成单独的回调函数也必须保存成单独的M文件文件。在第四种情况下,对象在第四种情况下,对象hObject的的Callback属性设置为属性设置为myfile,5,6,回调函数不仅,回调函数不仅必须带必须带obj和和even
120、t两个参数,而且还包含了用户需要传递的其它参数。其中,用户传两个参数,而且还包含了用户需要传递的其它参数。其中,用户传递的参数的个数不受限制。这时的递的参数的个数不受限制。这时的回调函数可以是单独的函数回调函数可以是单独的函数M文件,也可以写在主文件,也可以写在主函数函数M文件内文件内。【说明说明】图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/22%定义主函数定义主函数function DefineCallback%创建图形窗口对象创建图形窗口对象hFig= figure(units,normalize,. po
121、sition,0.4 0.4 0.3 0.2);%创建下压按钮对象,设置其创建下压按钮对象,设置其Callback属性属性hPush=uicontrol(parent,hFig,. style,pushbutton,. String,Execute Callback,. units,normalize,. position,0.4 0.4 0.3 0.2);【例例】将将Callback编写成单独的函数编写成单独的函数set(hPush,callback,ex54_9_Callback)%定义回调函数,作为子函数定义回调函数,作为子函数function ex54_9_Callback(obj,e
122、vent)figure;x = 0:pi/20:2*pi;y = sin(x);plot(x,y);图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/22(2 2)按钮控件(按钮控件(pushbutton和和togglebutton)增加背景图片)增加背景图片通过控件的通过控件的CData属性,用户可以设置属性,用户可以设置pushbutton和和togglebutton的背景图片,以美化图形界面。实现的方法如下:的背景图片,以美化图形界面。实现的方法如下:设计一些按钮的图片,保存为设计一些按钮的图片,保存为jpg格
123、式备用。例如示例中的格式备用。例如示例中的mute.jpg。在图形窗口中创建按钮,对按钮进行初始化,设置其在图形窗口中创建按钮,对按钮进行初始化,设置其CData属性值。属性值。【例例】为按钮添加背景图片为按钮添加背景图片function ex54_10%创建图形窗口对象创建图形窗口对象hFig= figure(units,normalize, position,0.4 0.4 0.3 0.2);图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/22%创建下压按钮对象,设置其Callback属性hPush=uicon
124、trol(parent,hFig,. style,pushbutton,. String,. units,normalize,. position,0.4 0.4 0.2 0.2);%读取按钮的背景图片a,map=imread(mute.jpg);%取得图片的尺寸r,c,d=size(a);%改变图片的大小,使其和按钮的大小相符x=ceil(r/30); y=ceil(c/30); g=a(1:x:end,1:y:end,:);%设置按钮的CData属性值set(hPush,CData,g);程序运行效果图:程序运行效果图:图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽
125、车工程学院合肥工业大学机械与汽车工程学院. 2024/9/22(3 3)用户界面控件的编程方法用户界面控件的编程方法 创建用户界面控件对象创建用户界面控件对象 用户可以在图形界面上创建上述所列的用户可以在图形界面上创建上述所列的10种用户界面控件对象。创建这些对象种用户界面控件对象。创建这些对象需要调用需要调用MATLAB提供的提供的uicontrol函数,见,其常用的调用格式如下:函数,见,其常用的调用格式如下:handle = uicontrol(parent,PropertyName,PropertyValue,.)其中,其中,parent是父对象的句柄,指明要在什么对象中创建用户界面控
126、件。是父对象的句柄,指明要在什么对象中创建用户界面控件。parent可以是可以是figure、 uipanel或或uibuttongroup的句柄。的句柄。 用户想创建用户想创建uipanel或或uibuttongroup控件对象,可以分别调用控件对象,可以分别调用uipanel函数和函数和uibuttongroup函数。函数。handle=uipanel(parent,PropertyName1,value1,PropertyName2,value2,.);handle=uibuttongroup(parent, PropertyName1,value1, PropertyName2,val
127、ue2,.);图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/22【例例5.4-11】在图形界面上创建在图形界面上创建uipanel控件,在控件,在uipanel上添加三个上添加三个radiobutton,并设置第一个,并设置第一个radiobutton为选中状态为选中状态function ex54_11%创建图形窗口对象创建图形窗口对象hFig= figure(units,normalize,. position,0.4 0.4 0.3 0.2);%创建创建uipanel控件控件hPanel=uipanel(hF
128、ig,. Title,panel,. units,normalize,. position,0.1 0.1 0.4 0.8);%创建创建radiobutton控件控件hRadio1=uicontrol(parent,hPanel,. style,radiobutton,. String,radiobutton1,. units,normalize,. position,0.1 0.1 0.8 0.2,. value,1);hRadio2=uicontrol(parent,hPanel,. style,radiobutton,. String,radiobutton2,. units,norma
129、lize,. position,0.1 0.4 0.8 0.2,. value,0);hRadio3=uicontrol(parent,hPanel,. style,radiobutton,. String,radiobutton3,. units,normalize,. position,0.1 0.7 0.8 0.2,. value,0);图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/22图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024
130、/9/22 处理用户界面控件的回调函数处理用户界面控件的回调函数 假设某个用户界面控件的假设某个用户界面控件的Callback设置为设置为函数句柄的形式函数句柄的形式, hObject为执行为执行Callback的对象的句柄,的对象的句柄,eventdata为包含事件信为包含事件信息的结构体。下面分别讲述各种控件的回调函数的处理方法。息的结构体。下面分别讲述各种控件的回调函数的处理方法。 checkbox用户可以通过查询列表框的用户可以通过查询列表框的Value属性值,来确定列表属性值,来确定列表框是否被选中。框是否被选中。function checkbox1_Callback(hObject
131、,eventdata)%判断判断checkbox是否被选中是否被选中if (get(hObject,Value) = get(hObject,Max) % checkbox被选中,在这里添加处理代码被选中,在这里添加处理代码else % checkbox未被选中,在这里添加处理代码未被选中,在这里添加处理代码end图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/22 edit 使用使用get命令,通过获取编辑框的命令,通过获取编辑框的String属性值,即可获属性值,即可获得用户在编辑框中的输入内容。得用户在编辑框
132、中的输入内容。function edittext1_Callback(hObject,eventdata)user_string = get(hObject,String);% 后续处理代码后续处理代码其中,其中,user_string为字符串类型,如果用户希望输入数为字符串类型,如果用户希望输入数值类型,则需要调用值类型,则需要调用str2double函数对函数对user_string进行转换,进行转换,将字符串转换为数值。方法如下:将字符串转换为数值。方法如下:user_value=str2double(user_string);图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大
133、学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/22 listbox 当列表框的当列表框的Callback被触发时,其被触发时,其Value属性值为被选中属性值为被选中的列表项的索引值,的列表项的索引值,String属性值则是包含列表中所有条目属性值则是包含列表中所有条目的的cell数组。数组。function listbox1_Callback(hObject,eventdata)%取得被选中条目的索引值取得被选中条目的索引值index_selected = get(hObject,Value);%取得列表框中的所有条目,保存到取得列表框中的所有条目,保存到list元胞数
134、组中元胞数组中string_list = get(hObject,String);%根据索引值获取所选中的列表条目根据索引值获取所选中的列表条目item_selected =string_listindex_selected; 图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/22popupmenu 弹出式菜单的操作方法与列表框类似。弹出式菜单的操作方法与列表框类似。function popupmenu1_Callback(hObject,eventdata)%取得被选中条目的索引值取得被选中条目的索引值index_
135、selected = get(hObject,Value);%取得弹出式菜单中的所有条目,保存到取得弹出式菜单中的所有条目,保存到list元胞数组中元胞数组中string_list = get(hObject,String);%根据索引值获取所选中的条目,根据索引值获取所选中的条目,item_selected为字符串为字符串item_selected = string_listindex_selected; 图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/22pushbutton 下压按钮的下压按钮的Callbac
136、k的处理较为简单,用户只要在其中加入要处理的程序的处理较为简单,用户只要在其中加入要处理的程序代码,点击按钮,则代码,点击按钮,则Callback内的代码被执行,完成用户需要的操作。内的代码被执行,完成用户需要的操作。下面的代码在图形界面上创建一个按钮控件,当用户点击按钮时,调用命下面的代码在图形界面上创建一个按钮控件,当用户点击按钮时,调用命令来关闭图形窗口。令来关闭图形窗口。function myguihFig= figure(units,normalize, position,0.4 0.4 0.3 0.2);%创建按钮控件创建按钮控件hButton=uicontrol(parent,h
137、Fig,style,push,String,push button, units,normalize,position,0.3 0.4 0.4 0.2);%设置按钮控件的设置按钮控件的Callback属性属性set(hButton,Callback,pushbutton1_Callback);%按钮的回调函数按钮的回调函数function pushbutton1_Callback(hObject,eventdata)close(gcbf);图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/22radiobutton
138、在在单单选选按按钮钮的的回回调调函函数数内内部部,用用户户可可以以通通过过查查询询其其Value属性值来确定单选按钮的当前状态。属性值来确定单选按钮的当前状态。function radiobutton1_Callback(hObject,eventdata)if (get(hObject,Value) = get(hObject,Max)%单选按钮被选中,进行后续处理单选按钮被选中,进行后续处理else% 单选按钮未被选中,进行后续处理单选按钮未被选中,进行后续处理end图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/
139、9/22slider 滑动条的滑动条的Max和和Min属性值确定了滑动条的变动范围属性值确定了滑动条的变动范围(Max-Min),其),其SliderStep属性值确定了滑动条每次移动属性值确定了滑动条每次移动的步长。的步长。SliderStep的属性值形如的属性值形如min_step max_step,min_step表示当用鼠标点击滑动条两端的箭头时,滑动条移表示当用鼠标点击滑动条两端的箭头时,滑动条移动的数值;动的数值;max_step表示当拖动滑动条的滑块或者用鼠标点表示当拖动滑动条的滑块或者用鼠标点击滑块的两侧时,滑动条移动的数值。击滑块的两侧时,滑动条移动的数值。 用户可以在滑动条
140、的回调函数内,通过查询其用户可以在滑动条的回调函数内,通过查询其Value属性值来取得滑动条当前所指示的数值。属性值来取得滑动条当前所指示的数值。function slider1_Callback(hObject,eventdata)%取得滑动条所指示的数值取得滑动条所指示的数值slider_value = get(hObject,Value);%进行后续处理进行后续处理图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/22 togglebutton 在在双双位位按按钮钮的的回回调调函函数数中中,用用户户需需要要编编
141、写写代代码码来来查查询询其其状状态态,然然后后决决定定进进行行什什么么样样的的操操作作。当当双双位位按按钮钮被被按按下下时时,MATLAB将将其其Value属属性性值值设设置置为为Max的的数数值值(Max的的缺缺省省值值为为1);双双位位按按钮钮抬抬起起时时,MATLAB将将其其Value属属性性值值设设置为置为Min的数值(的数值(Min的缺省值为的缺省值为0)。)。function togglebutton1_Callback(hObject,eventdata)%取得其取得其Value属性值属性值button_state = get(hObject,Value);if button_s
142、tate = get(hObject,Max)% 按钮被按下,进行后续处理按钮被按下,进行后续处理elseif button_state = get(hObject,Min)% 按钮抬起,进行后续处理按钮抬起,进行后续处理 end图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/22buttongroup 按钮组控件用来创建一个容器对象,来集中管理一组具有互斥功能按钮组控件用来创建一个容器对象,来集中管理一组具有互斥功能的单选按钮和双位按钮。的单选按钮和双位按钮。当用户选择按钮组控件中的某一个按钮时,按钮组控件的当用
143、户选择按钮组控件中的某一个按钮时,按钮组控件的SelectionChangeFcn回调函数就会被调用,用户可在该函数内部添加对事回调函数就会被调用,用户可在该函数内部添加对事件的处理代码。如果按钮组控件的件的处理代码。如果按钮组控件的SelectionChangeFcn被定义为函数句柄被定义为函数句柄的形式,的形式,MATLAB会传递两个参数(如下所示):会传递两个参数(如下所示):hObject是按钮组控件是按钮组控件的句柄,的句柄,eventdata是包含事件信息的结构体,包含的字段如下表所列:是包含事件信息的结构体,包含的字段如下表所列:字段字段描述描述EventName事件的名称,其值
144、为事件的名称,其值为SelectionChangedOldValue事件发生之前所选择的对象的句柄。若之前没有对象被选事件发生之前所选择的对象的句柄。若之前没有对象被选中,其值为中,其值为 NewValue当前所选择的对象的句柄当前所选择的对象的句柄图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/22【例例】在界面上增加按钮组控件,创建两个单选按钮,分别控制栅格的打开和关在界面上增加按钮组控件,创建两个单选按钮,分别控制栅格的打开和关闭;创建列表框控件,来控制曲线的颜色;创建弹出式菜单控件,来控制曲线的闭;创建列表
145、框控件,来控制曲线的颜色;创建弹出式菜单控件,来控制曲线的线性。线性。在本示例程序中,使用了在本示例程序中,使用了“句柄结构句柄结构”,即把所有图形对象的句柄保存到结构体即把所有图形对象的句柄保存到结构体s中,并把句中,并把句柄结构当作输入参数在各控件的回调函数之间进行传递,用户可以方便地通过访问句柄结构的柄结构当作输入参数在各控件的回调函数之间进行传递,用户可以方便地通过访问句柄结构的各个字段来获得各图形对象的句柄,从而对图形对象进行相应的操作,例如,设置曲线对象的各个字段来获得各图形对象的句柄,从而对图形对象进行相应的操作,例如,设置曲线对象的颜色和线型等。颜色和线型等。图形用户界面编程图
146、形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/22七、七、用户菜单对象用户菜单对象 用户菜单对象可建立下拉式菜单,将它放置在图形窗口的顶部。用户菜单对象可建立下拉式菜单,将它放置在图形窗口的顶部。1 1、简介、简介2 2、用户菜单对象常用属性和方法用户菜单对象常用属性和方法 属性名称属性描述Accelerator指定菜单项的快捷键,用户可以使用Ctrl+Accelerator来选择菜单项。其中Ctrl+c、Ctrl+x和Ctrl+v是预留给系统粘贴板使用的Callback用户选中菜单项时调用的回调函数Checked指示菜单项的选中
147、状态,其值为“on”(选中)或“off”(缺省值,表示未选中)Enable指示菜单项是否可用,其值为“on”(缺省值,表示菜单项可用)或“off”(菜单项不可用)ForegroundColor菜单项的文本颜色,是一个RGB三元素数组或者MATLAB预定义的颜色Label含有菜单项名字的字符串,使用“&”符号将使其后的一个字符加上下划线,用户可以使用Alt+该字符来激活菜单项Position是一个标量,用来指示菜单项的相对位置。对于最左边的菜单,其值为1;对于某一菜单中的最上边的菜单项,其值为1Separator指示菜单中各菜单项之间是否有分隔符。其值为“on”(有分隔符)或“off”(缺省值,
148、无分隔符)图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/22【例例】在界面窗口上创建菜单在界面窗口上创建菜单“曲线颜色曲线颜色”,用来控制所绘制曲线的颜色。,用来控制所绘制曲线的颜色。(1)创建用户菜单对象,并设置其)创建用户菜单对象,并设置其Callback属性。属性。s.menu = uimenu(Label,曲线颜色曲线颜色);uimenu(s.menu,Label,红色红色, .Callback,menu_callback,s,foregroundcolor,1 0 0);uimenu(s.menu,La
149、bel,绿色绿色, .Callback,menu_callback,s,foregroundcolor,g); uimenu(s.menu,Label,蓝色蓝色, .Callback,menu_callback,s,foregroundcolor,b,.Separator,on,Accelerator,b);图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/22(2)定义菜单对象的)定义菜单对象的Callback回调函数。回调函数。function menu_callback(hObject,eventdata,s)
150、value= get(hObject,position);switch value case 1 set(s.plot,color,r); case 2 set(s.plot,color,g); case 3 set(s.plot,color,b);end图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/22图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/22八、八、用户现场菜单对象用户现场菜单对象 1 1、简介、简介2 2、创建现场菜单
151、的步骤和方法创建现场菜单的步骤和方法 uicontextmenu命令允许用户为图形对象建立现场菜单,当命令允许用户为图形对象建立现场菜单,当用户在图像对象上点击鼠标用户在图像对象上点击鼠标 右键时,将弹出现场菜单,用右键时,将弹出现场菜单,用户可以选择菜单项来执行相应的命令。现场菜单总是和其户可以选择菜单项来执行相应的命令。现场菜单总是和其它图形对象联系在一起。它图形对象联系在一起。 用户创建图像对象的现场菜单通常按照如下的步骤用户创建图像对象的现场菜单通常按照如下的步骤:(1)调用)调用uicontextmenu命令创建现场菜单对象。命令创建现场菜单对象。(2)创建子菜单项,并定义各菜单项的
152、)创建子菜单项,并定义各菜单项的Callback属性。属性。(3)设置图形对象的)设置图形对象的UIContextMenu属性值,把现场菜属性值,把现场菜单和图形对象联系起来。单和图形对象联系起来。图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/22% 建立现场菜单建立现场菜单cmenu = uicontextmenu;% 定义现场菜单项的定义现场菜单项的Callback属性属性cb1 = set(gco, Color, r);cb2 = set(gco, Color, g);cb3 = set(gco, Colo
153、r, b);% 创建现场菜单项创建现场菜单项uimenu(cmenu, Label, 红色红色, Callback, cb1);uimenu(cmenu, Label, 绿色绿色, Callback, cb2);uimenu(cmenu, Label, 蓝色蓝色, Callback, cb3);% 设置线条对象的设置线条对象的UIContextMenu属性值属性值set(s.plot,UIContextMenu, cmenu);【例例】建立图中曲线对象的现场菜单,用来改变曲线的颜色建立图中曲线对象的现场菜单,用来改变曲线的颜色图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与
154、汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/22图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/22九、九、用户工具条对象用户工具条对象 1 1、简介、简介2 2、uipushtool对象常用属性和方法对象常用属性和方法 用户可以调用用户可以调用uitoolbar命令来在图形窗口上创建工具条,命令来在图形窗口上创建工具条,然后可以调用然后可以调用uipushtool命令或命令或uitoggletool命令在工具条命令在工具条上创建工具按钮。上创建工具按钮。uipushtool命令用来创建下压按钮;命
155、令用来创建下压按钮;uitoggletool用来创建双位按钮。用来创建双位按钮。属性名称属性描述CData在工具条上的下压按钮上显示的真彩图像ClickedCallback当用鼠标点击工具条上的按钮时执行的回调函数Separator确定在每个按钮的左侧是否显示分隔符,其值为“on”或“off”(缺省值)TooltipString当鼠标指针移动到按钮上时,显示的提示字符串图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/223 3、uitoggletool对象常用属性和方法对象常用属性和方法 属性名称属性描述CData
156、在工具条上的双位按钮上显示的真彩图像OnCallback当uitoggletool对象的Enable属性设置为on时,若其State属性设置为on,或者当用鼠标点击双位按钮使其处于on位置(即按钮被按下),该回调函数被执行OffCallback当uitoggletool对象的Enable属性设置为on时,若其State属性设置为off,或者当用鼠标点击双位按钮使其处于off位置(即按钮被抬起),该回调函数被执行ClickedCallback当uitoggletool的OffCallback执行完成后,该回调函数被执行Separator确定在每个按钮的左侧是否显示分隔符,其值为“on”或“off
157、”(缺省值)State指示工具条上双位按钮的状态。其值可以为on(按钮被按下)或off(缺省值,按钮被抬起)TooltipString当鼠标指针移动到按钮上时,显示的提示字符串图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/22【例例】隐藏图形窗口上方的隐藏图形窗口上方的MATLAB标准工具条,建立新的工具条,在其上标准工具条,建立新的工具条,在其上添加双位按钮,用来控制栅格的打开和关闭添加双位按钮,用来控制栅格的打开和关闭%创建工具条,在其上创建双位按钮创建工具条,在其上创建双位按钮s.toolbar = uit
158、oolbar(s.hf);a = rand(16,16,3);s.toggletool= uitoggletool(s.toolbar,CData,a,TooltipString,栅格控制栅格控制);%设置设置uitoggletool对象的对象的OnCallback和和OffCallback属性属性set(s.toggletool,oncallback,grid_on_callback,s);set(s.toggletool,offcallback,grid_off_callback,s);%定义定义OnCallback和和OffCallback回调函数回调函数function grid_on
159、_callback(hObject, eventdata,s)set(s.haxes,xgrid,on,ygrid,on); function grid_off_callback(hObject, eventdata,s)set(s.haxes,xgrid,off,ygrid,off);图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/22图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/22第五节第五节 利用利用GUIDE工具开发图工具开
160、发图形用户界面形用户界面 图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/22利用利用MATLAB提供的提供的GUIDE图形用户界面开发工具,用户可图形用户界面开发工具,用户可以方便地设计出各种符合要求的图形用户界面。以方便地设计出各种符合要求的图形用户界面。用户可以通过三种方式进入用户可以通过三种方式进入GUIDE快速启动界面:快速启动界面:(1)从)从MATLAB窗口的菜单中选择菜单窗口的菜单中选择菜单File-New-GUI。(2)点击)点击MATLAB窗口上方的工具条中的窗口上方的工具条中的 按钮。按钮。(
161、3)在命令窗口中输入)在命令窗口中输入guide命令。命令。 图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/22图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/22一、一、GUIDE及其组成及其组成 默认情况下,选择默认情况下,选择“Create New GUI”标签页中的标签页中的Blank GUI (Default)选项,选项,将打开带有空白模板的将打开带有空白模板的“布局编辑器布局编辑器”(Layout Editor),如下图所
162、示。),如下图所示。图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/22从图可见,从图可见,GUIDE其实是一个界面设计工具集合,它提供了其实是一个界面设计工具集合,它提供了一系列工具用来创建图形用户界面。这些工具包括:一系列工具用来创建图形用户界面。这些工具包括:(1)界面布局编辑器界面布局编辑器。允许用户利用鼠标拖拽的方式在图。允许用户利用鼠标拖拽的方式在图形窗口中添加所需的图形对象。形窗口中添加所需的图形对象。(2)对齐工具对齐工具。用来将界面窗口中的图形对象按横向或纵。用来将界面窗口中的图形对象按横向或纵向
163、对齐,以使界面美观。向对齐,以使界面美观。(3)菜单编辑工具菜单编辑工具。用来设计和创建窗口菜单和现场菜单。用来设计和创建窗口菜单和现场菜单。(4)Tab顺序编辑工具顺序编辑工具。用来确定当按下键盘上的。用来确定当按下键盘上的Tab按键按键时,界面上的控件获得输入焦点的顺序。时,界面上的控件获得输入焦点的顺序。图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/22(5)工具条编辑工具工具条编辑工具。用来设计和创建窗口工具条。用来设计和创建窗口工具条。(6)M文件编辑器文件编辑器。用来打开与图形用户界面相关联。用来打开
164、与图形用户界面相关联的的M文件,供用户编辑修改。文件,供用户编辑修改。(7)属性查看器属性查看器。用来查看和设置图形对象的属性值。用来查看和设置图形对象的属性值。(8)对象浏览器对象浏览器。观察当前图形用户界面上的图形对。观察当前图形用户界面上的图形对象的句柄的继承关系表。象的句柄的继承关系表。图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/22二、二、GUIDE产生的产生的FIG文件和文件和M文件文件 GUIDE将用户设计好的将用户设计好的GUI界面保存在一个界面保存在一个FIG资源文件资源文件中,同时还生成包含
165、用于控制中,同时还生成包含用于控制GUI初始化以及启动初始化以及启动GUI的的代码的代码的M文件文件。该该M文件的内容包括两部分:文件的内容包括两部分:GUI初始化初始化和和控件的回调函数控件的回调函数。当用户与当用户与GUI进行交互操作时,程序将调用相应的回调函进行交互操作时,程序将调用相应的回调函数来处理用户的操作。数来处理用户的操作。图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/22【GUIDE生成的生成的M文件的组成文件的组成】 GUIDE生成的是生成的是函数函数M文件文件,包含如下几部分,包含如下几部分
166、(以以ex53_1.m文件文件 为例为例): (1)主函数声明部分)主函数声明部分 ex53_1.m文件的第一行为:文件的第一行为:varargin(Variable length input argument list)和和varargout(Variable length output argument list)都是可变长度的都是可变长度的cell类型的结构体,是类型的结构体,是MATLAB预定义的预定义的专用参数,可以分别用来存储函数的输入和输出参数。专用参数,可以分别用来存储函数的输入和输出参数。它们是在函数的输入和输出参数个数不确定的情况下使用,可以应用到可它们是在函数的输入和输出
167、参数个数不确定的情况下使用,可以应用到可变输入输出参数的函数中。变输入输出参数的函数中。function varargout = ex53_1(varargin)这一行为主函数的声明行这一行为主函数的声明行,函数名为,函数名为ex53_1,varargin和和varargout分分别是函数的输入、输出参数。别是函数的输入、输出参数。图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/22(2)帮助信息部分)帮助信息部分主函数声明行下面的各行以注释符号主函数声明行下面的各行以注释符号“%”开头,它是当用户在命令窗口开头,
168、它是当用户在命令窗口中输入中输入“help ex53_1”时显示的帮助信息,说明了用户调用该时显示的帮助信息,说明了用户调用该M文件的方文件的方法。法。 help ex53_1 ex53_1 M-file for ex53_1.fig ex53_1, by itself, creates a new ex53_1 or raises the existing singleton*. H = ex53_1 returns the handle to a new ex53_1 or the handle to the existing singleton*. ex53_1(CALLBACK,hOb
169、ject,eventData,handles,.) calls the local function named CALLBACK in ex53_1.M with the given input arguments. ex53_1(Property,Value,.) creates a new ex53_1 or raises the existing singleton*. Starting from the left, property value pairs are applied to the GUI before ex53_1_OpeningFcn gets called. An
170、unrecognized property name or invalid value makes property application stop. All inputs are passed to ex53_1_OpeningFcn via varargin. *See GUI Options on GUIDEs Tools menu. Choose GUI allows only one instance to run (singleton). See also: guide, guidata, guihandles【注意注意】帮助信息的各帮助信息的各行以注释符号行以注释符号“%”开头
171、,开头,中间不允许有中间不允许有空行。若中间空行。若中间有空行,则在有空行,则在命令窗口中显命令窗口中显示的帮助信息示的帮助信息到此为止,空到此为止,空行下面的信息行下面的信息将不会在命令将不会在命令窗口中显示。窗口中显示。图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/22(3)GUI初始化部分初始化部分gui_Singleton = 1;gui_State = struct(gui_Name, mfilename, . gui_Singleton, gui_Singleton, . gui_OpeningFcn
172、, ex53_1_OpeningFcn, . gui_OutputFcn, ex53_1_OutputFcn, . gui_LayoutFcn, , . gui_Callback, );if nargin & ischar(varargin1) gui_State.gui_Callback = str2func(varargin1);end if nargout varargout1:nargout = gui_mainfcn(gui_State, varargin:);else gui_mainfcn(gui_State, varargin:);end当当用用户户运运行行该该GUI程程序序时
173、时,这这部部分分代代码码分分别别调调用用界界面面窗窗口口和和控控件件的的CreateFcn函函数数来来创创建建控控件件。用用户户不不需需要要编编辑辑这这些代码。些代码。图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/22(4)OpeningFcn函数部分函数部分% - Executes just before ex53_1 is made visible.function ex53_1_OpeningFcn(hObject, eventdata, handles, varargin)% This function
174、has no output args, see OutputFcn.% hObject handle to figure% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)% varargin command line arguments to ex53_1 (see VARARGIN) x=0:pi/50:8*pi;y=sin(x);axes(handles.axes1);handles.hpl
175、ot=plot(x,y,color,1 0 0); % Choose default command line output for ex53_1handles.output = hObject; % Update handles structureguidata(hObject, handles); % UIWAIT makes ex53_1 wait for user response (see UIRESUME)% uiwait(handles.figure1);图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9
176、/22 函数内的代码,是在函数内的代码,是在GUI界面显示之前执行的,可以在其界面显示之前执行的,可以在其中添加其它初始化代码。中添加其它初始化代码。若用户在调用该若用户在调用该GUI程序时传入了程序时传入了输入参数输入参数,则可以从,则可以从varargin数组中得到这些输入参数。输入参数的取得可以通数组中得到这些输入参数。输入参数的取得可以通过过varargin1、varargin2、等来得到输入的第等来得到输入的第1、2、个参数。个参数。缺省情况下,在缺省情况下,在OpeningFcn函数体内包含下面的语句:函数体内包含下面的语句:handles.output = hObject;该命令
177、是把该命令是把hObject的值保存到句柄结构的值保存到句柄结构handles中,中,hObject是图形窗口是图形窗口figure的句柄值的句柄值。 【几点说明几点说明】图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/22(5)OutputFcn函数部分函数部分% - Outputs from this function are returned to the command line.function varargout = ex53_1_OutputFcn(hObject, eventdata, handle
178、s) % varargout cell array for returning output args (see VARARGOUT);% hObject handle to figure% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA) % Get default command line output from handles structurevarargout1 = handles.ou
179、tput; 图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/22OutputFcn函数是在图形用户界面创建完成并显示后调用的最后一个函数是在图形用户界面创建完成并显示后调用的最后一个函数,在函数体内将主函数的返回参数放置到函数,在函数体内将主函数的返回参数放置到varargout数组中。数组中。缺省情况下,该函数体内只包含一条语句:缺省情况下,该函数体内只包含一条语句: varargout1 = handles.output;【含义含义】:将在将在OpeningFcn中保存到中保存到handles结构中的结构中的图
180、形窗口图形窗口figure的句柄值的句柄值作为第一个输出参数放置到作为第一个输出参数放置到varargout数组中。因此,当用户调数组中。因此,当用户调用由用由GUIDE生成的某一图形用户界面程序时,生成的某一图形用户界面程序时,默认情况下得到的是默认情况下得到的是“图图形窗口形窗口figure的句柄的句柄”。用户也可以修改用户也可以修改OutputFcn函数体内的代码,将更多的输出参数放置函数体内的代码,将更多的输出参数放置到到varargout中。例如,输出变量中。例如,输出变量out1、out2: varargout1 = handles.output; varargout2 = out
181、1; varargout3 = out2;图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/22(6)各控件的回调函数部分)各控件的回调函数部分 默认情况下,默认情况下,MATLAB会添加各用户界面控件的会添加各用户界面控件的CreateFcn回调函数,用户可以在该函数体内添加代码,设回调函数,用户可以在该函数体内添加代码,设置该控件的一些属性值,例如:修改背景颜色等。置该控件的一些属性值,例如:修改背景颜色等。用户还可以手工添加界面窗口及控件的其它回调函数。用户还可以手工添加界面窗口及控件的其它回调函数。例如,可以
182、添加在图形窗口中对鼠标进行控制的回调函数例如,可以添加在图形窗口中对鼠标进行控制的回调函数:WindowButtonDownFcn、WindowButtonMotionFcn、WindowButtonUpFcn,等等。当用户在图形窗口中点击或,等等。当用户在图形窗口中点击或移动鼠标时,这些回调函数将由移动鼠标时,这些回调函数将由MATLAB自动调用。自动调用。图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/22三、三、GUIDE创建的创建的GUI中的数据管理中的数据管理在利用在利用GUIDE创建图形用户界面程序时,
183、创建图形用户界面程序时,MATLAB会在会在程序中自动创建并维护一个称为程序中自动创建并维护一个称为handles的的“句柄结构句柄结构”。handles结构被包含在各个子函数的输入参数中。结构被包含在各个子函数的输入参数中。handles之所以被称为句柄结构,是因为它是一个结构体之所以被称为句柄结构,是因为它是一个结构体(struct),其中),其中包含了图形窗口包含了图形窗口figure及其上所有控件的及其上所有控件的句柄值句柄值。图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/22程序中的handles结构
184、示意图:其中的其中的figure1、popupmenu1、text1、axes1是图形窗口、是图形窗口、弹出式菜单、静态文本和坐标轴的弹出式菜单、静态文本和坐标轴的“Tag”属性值属性值;hplot和和output是用户添加的保存到是用户添加的保存到handles结构中的数据。结构中的数据。利用利用handles结构,用户可以方便地访问图形窗口及其上的各结构,用户可以方便地访问图形窗口及其上的各个控件,各控件句柄的访问方式为个控件,各控件句柄的访问方式为“handles.Tag”。例如:。例如:handles.figure1、handles.axes1等。等。 图形用户界面编程图形用户界面编程
185、 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/22%定义变量并赋值定义变量并赋值myvalue=10;%在在handles结构中创建新的域,名称为结构中创建新的域,名称为newvalue,并将,并将myvalue的值保存到该域的值保存到该域handles.newvalue=myvalue;%更新更新handles结构,结构,hObject可以是可以是figure或其上或其上控件的句柄。控件的句柄。该句不可遗漏!该句不可遗漏!guidata(hObject,handles);【例例】下面的代码将下面的代码将myvalue的数值保存到的数值保存到h
186、andles结构中结构中图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/22四、利用四、利用GUIDE创建创建GUI利用利用GUIDE来创建图形用户界面包含如下四个步骤:来创建图形用户界面包含如下四个步骤:(1)打开)打开GUIDE的的Layout Editor,用鼠标将所需控件拖,用鼠标将所需控件拖动到布局区的合适位置,并利用对齐工具等将各个控件对动到布局区的合适位置,并利用对齐工具等将各个控件对齐;打开属性编辑器,修改各控件的属性值。齐;打开属性编辑器,修改各控件的属性值。(2)将界面布局保存到)将界面布局保存
187、到FIG文件。文件。(3)为各控件添加回调函数,在)为各控件添加回调函数,在M文件的各回调函数内添文件的各回调函数内添加合适的处理代码。加合适的处理代码。(4)保存)保存M文件及文件及FIG文件。文件。图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/22【例例】利用利用GUIDE来创建来创建GUI界面界面(1)用鼠标将各控件拖动到布局区的合适位置,并拖动各控)用鼠标将各控件拖动到布局区的合适位置,并拖动各控件的右下角以改变其大小。件的右下角以改变其大小。(2)修改各控件的属性值。其中,)修改各控件的属性值。其中,A
188、xes控件的控件的Tag属性值为属性值为“axes1”;Button Group控件的控件的Title属性值为属性值为“栅格控制栅格控制”,Tag属性值为属性值为“uipanel1”;两个单选按钮的;两个单选按钮的Tag属性值分属性值分别为别为“radiobutton1”和和“radiobutton2”;“曲线颜色曲线颜色”静静态文本的态文本的Tag属性值为属性值为“text1”,“曲线线型曲线线型”静态文本的静态文本的Tag属性值为属性值为“text2”;Listbox控件的控件的Tag属性值为属性值为“listbox1”,String属性值为属性值为“r;g;b;Pop-up Menu控件
189、的控件的Tag属性值为属性值为popupmenu1,String属性值为属性值为“-;-;:;-.;none” 图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/22(3)利用)利用“菜单编辑工具菜单编辑工具”创建菜单,如下图所示。菜单项的创建菜单,如下图所示。菜单项的Label属性分别为属性分别为“红色红色”、“绿色绿色”和和“蓝色蓝色”,Tag属性值分别为属性值分别为“menu_red”、“menu_green”和和“menu_blue”,并,并设置设置“绿色绿色”菜单项的菜单项的Accelerator为为“Ct
190、rl+B”。点击。点击Callback右边的右边的“View”按钮,可自动按钮,可自动添加相应菜单项的添加相应菜单项的Callback回调函数。回调函数。图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/22(4)利用)利用“工具条编辑工具工具条编辑工具”创建工具条,在其上创建双位按钮,如下图所创建工具条,在其上创建双位按钮,如下图所示示。双位按钮的双位按钮的Tag属性值为属性值为“uitoggletool1”,Tooltip String属性值为属性值为“栅格控制栅格控制”;点击;点击Off Callback和和O
191、n Callback按钮右边的按钮右边的“View”按钮,可自动添加其按钮,可自动添加其OffCallback和和OnCallback回调函数。回调函数。 图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/22(5)在界面上的)在界面上的Button Group控件、控件、Listbox控件和控件和Pop-up Menu控件上点击鼠标右键,控件上点击鼠标右键,在弹出的菜单中选择在弹出的菜单中选择“View Callbacks”下的菜单项,可分别添加相应的回调函数,如图下的菜单项,可分别添加相应的回调函数,如图5.5-
192、9所示。所示。Button Group控件的回调函数为控件的回调函数为“SelectionChangeFcn”; Listbox控件和控件和Pop-up Menu控件的回调函数为控件的回调函数为“Callback”。图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/22(6)在)在M文件的相应函数内添加合适的代码,实现程序的功能。文件的相应函数内添加合适的代码,实现程序的功能。在在xxx_OpeningFcn函数内添加初始化代码,在坐标轴内绘制曲线。函数内添加初始化代码,在坐标轴内绘制曲线。%初始化绘图数据初始化绘图
193、数据x=0:pi/50:2*pi;y=sin(x);%指定当前坐标轴指定当前坐标轴axes(handles.axes1);%绘制图形,并将线条对象的句柄保存到绘制图形,并将线条对象的句柄保存到handles句柄结构句柄结构handles.plot=plot(x,y,b,linewidth,1.5);%设置坐标轴的文本为倾斜,设置坐标轴的文本为倾斜,x轴的颜色为红色轴的颜色为红色set(gca,fontangle,italic,xcolor,1 0 0);%打开栅格打开栅格grid on%给给x和和y轴添加标签轴添加标签xlabel(x坐标轴坐标轴);ylabel(y坐标轴坐标轴);图形用户界面
194、编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/22l在在uipanel1_SelectionChangeFcn函数中添加代码函数中添加代码,当当Button Group控件中的单选按钮被选控件中的单选按钮被选中时中时,该函数内的代码被执行该函数内的代码被执行,坐标轴中的栅格线被打开和关闭。坐标轴中的栅格线被打开和关闭。 tag= get(eventdata.NewValue,Tag);switch tag case radiobutton1 set(handles.axes1,xgrid,on,ygrid,on); case
195、 radiobutton2 set(handles.axes1,xgrid,off,ygrid,off);end图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/22在在listbox1_Callback函数中添加代码,当用户选择列表框中的选项时,该函数中的代码被执函数中添加代码,当用户选择列表框中的选项时,该函数中的代码被执行,曲线的颜色被更改。行,曲线的颜色被更改。value= get(hObject,value);switch value case 1 set(handles.plot,color,r); ca
196、se 2 set(handles.plot,color,g); case 3 set(handles.plot,color,b);end 图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/22在在popupmenu1_Callback函数中添加代码,当函数中添加代码,当Pop-up Menu控件中的选项选中时,该函数控件中的选项选中时,该函数内的代码被执行,曲线的线型被更改。内的代码被执行,曲线的线型被更改。value= get(hObject,value);switch value case 1 set(handl
197、es.plot,linestyle,-,marker,none); case 2 set(handles.plot,linestyle,-,marker,none); case 3 set(handles.plot,linestyle,:,marker,none); case 4 set(handles.plot,linestyle,-.,marker,none); case 5 set(handles.plot,linestyle,none,marker,none);end图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 202
198、4/9/22在下拉菜单项的回调函数内添加代码。在下拉菜单项的回调函数内添加代码。function menu_red_Callback(hObject, eventdata, handles)set(handles.plot,color,r); function menu_green_Callback(hObject, eventdata, handles)set(handles.plot,color,g);function menu_blue_Callback(hObject, eventdata, handles)set(handles.plot,color,b);在工具按钮的回调函数内添加
199、代码。在工具按钮的回调函数内添加代码。function uitoggletool1_OffCallback(hObject, eventdata, handles)set(handles.axes1,xgrid,off,ygrid,off); function uitoggletool1_OnCallback(hObject, eventdata, handles)set(handles.axes1,xgrid,on,ygrid,on);。从示例程序可见,从示例程序可见,handles句柄结构在参数传递方面起了非常重要的作用,使用也非常方句柄结构在参数传递方面起了非常重要的作用,使用也非常方便
200、,用户可在实际编程工作中慢慢体会。便,用户可在实际编程工作中慢慢体会。图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/22第六节第六节 典型案例介绍典型案例介绍图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/22一、基于列表控件的图像浏览器一、基于列表控件的图像浏览器编程要点:编程要点:1、获取计算机硬盘上指定文件夹下的所有图片文件、获取计算机硬盘上指定文件夹下的所有图片文件 ls函数函数 ls函数返回一个函数返回一个mn的的char类
201、型的数组,类型的数组,m代表文件的个数,代表文件的个数,n代表文代表文件中的最长文件名的字符数。文件名少于件中的最长文件名的字符数。文件名少于n个字符的,在末尾用空格个字符的,在末尾用空格补齐。补齐。 filename=ls(*.m); %通配符通配符*代表要列出所有文件,代表要列出所有文件,.m是文件的扩展名。是文件的扩展名。filename=ginput.m scoretongji.mtest.m test1.m例例1:列出:列出MATLAB当前目录下的所有当前目录下的所有m文件:文件:图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工
202、程学院. 2024/9/22filename=ls( C:UsersDefaultPictures *.jpg);例例2:列出:列出“C:UsersDefaultPictures”目录下的所有目录下的所有jpg格式的图片文件格式的图片文件%filename为为mn的数组,参数的数组,参数1代表取得数组的行数代表取得数组的行数number_of_files=size(filename,1); 例例3:取得:取得filename中保存的文件的数目中保存的文件的数目fileii=filename(1,:);例例4:取得:取得filename中第中第1个文件的名称个文件的名称 图形用户界面编程图形用户
203、界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/22 dir函数函数 函数的用法为:函数的用法为:files=dir(dirname); 如果如果dirname 为指定的文件夹,则为指定的文件夹,则dir返回的是返回的是dirname文件夹中的所有文件夹中的所有文件夹和所有文件。文件夹和所有文件。files是一个是一个m1的结构体,包含文件的所有信息。的结构体,包含文件的所有信息。该结构体所包含的字段如下表所列:该结构体所包含的字段如下表所列:字段名字段名字段含义字段含义name文件名,如文件名,如mygui7date文件最后修改的日期,
204、如文件最后修改的日期,如04-一月一月-2010 11:24:28bytes文件的大小,如文件的大小,如4376isdir1表示是文件夹;表示是文件夹;0表示是文件表示是文件datenum以文件修改的日期,如以文件修改的日期,如734142.475324074,单位为秒,单位为秒图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/22例例1:列出:列出“C:UsersDefaultPictures”目录下的所有目录下的所有jpg格式的图片文件:格式的图片文件:filename=dir( C:UsersDefaultPi
205、ctures*.jpg);例例2:取得:取得filename中保存的文件的数目:中保存的文件的数目:number_of_files=length(filename); %filename为为m 1的结构体的结构体例例3:取得:取得filename中第中第ii个文件的名称:个文件的名称:fileii=filename(ii).name;例例4:取得列表框中的选中条目:取得列表框中的选中条目str=get(h, string ); %取得控件中的所有条目,取得控件中的所有条目,str是是N1的的cell数组数组value=get(h, value ); %取得所选条目的序号,是取得所选条目的序号,
206、是1n的数组的数组selected_str=str(value(:); %取得所选条目的字符串,取得所选条目的字符串,selected_str是是1n的的cell数组数组例例5:删除列表框中的选中条目:删除列表框中的选中条目str=get(h, string ); %取得控件中的所有条目取得控件中的所有条目value=get(h, value ); %取得所选条目的序号取得所选条目的序号str(value(:)=; %把指定条目的字符串设置为把指定条目的字符串设置为,即可删除所选的条目,即可删除所选的条目set(h, string ,str, value ,1); %重新设置显示的条目,并设置
207、第一个条目为选中状态重新设置显示的条目,并设置第一个条目为选中状态图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/22二、二、在在GUIGUI中对鼠标进行控制中对鼠标进行控制编程要点:编程要点:为了响应鼠标事件,为了响应鼠标事件,MATLAB在在figure的属性中设置了的属性中设置了WindowButtonDownFcn、WindowButtonMotionFcn、WindowButtonUpFcn、WindowScrollWheelFcn这四个属性。在命令窗口这四个属性。在命令窗口中输入命令中输入命令set(g
208、cf),或者在,或者在GUIDE环境下在环境下在figure区域内点击鼠标右键,区域内点击鼠标右键,都可以看到这些函数。都可以看到这些函数。 set(gcf).WindowButtonDownFcn: string -or- function handle -or- cell arrayWindowButtonMotionFcn: string -or- function handle -or- cell arrayWindowButtonUpFcn: string -or- function handle -or- cell arrayWindowScrollWheelFcn: string
209、 -or- function handle -or- cell array.图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/22其中,其中,WindowButtonDownFcn和和WindowButtonUpFcn是用来响应鼠标是用来响应鼠标按键按下和弹起事件的;按键按下和弹起事件的;WindowButtonMotionFcn是用来响应鼠标移动是用来响应鼠标移动事件的;事件的;WindowScrollWheelFcn是响应鼠标滚轮滚动事件的。用户在是响应鼠标滚轮滚动事件的。用户在编程时,只要设置了编程时,只要设置
210、了figure的这几个属性值,就可以实现对鼠标输入操的这几个属性值,就可以实现对鼠标输入操作的控制。作的控制。 如何取得鼠标指针当前位置的坐标如何取得鼠标指针当前位置的坐标Figure对象的“CurrentPoint”属性值存储了鼠标指针最后一次按下时的位置。如果用户想取得鼠标指针的当前位置,可以通过如下方式实现:(1)pos=get(gcf, CurrentPoint ); 取得鼠标指针在figure中的当前位置。其中,pos是12 的数组,pos(1)是鼠标指针所在位置的横坐标,pos(2)是鼠标指针所在位置的纵坐标。这个横纵坐标是相对于figure的左下角左下角而言的,坐标值的单位和fi
211、gure的“Units”属性值是一致的。图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/22(2)pos=get(gca, CurrentPoint);取得鼠标指针在当前坐标轴中的位置。坐标轴的CurrentPoint属性值包含最新按下鼠标位置的点的坐标轴对象上的23的矩阵,其形式为,它定义了从坐标空间前面延伸到后面的一条三维直线,pos是23的数组。对于二维坐标轴,pos(1)是鼠标指针在坐标轴中的横坐标,pos(3)是鼠标指针在坐标轴中的纵坐标。横纵坐标的范围为坐标轴的“XLim”和“YLim”属性值。图形用户
212、界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/22如何区分按下的是鼠标左键、右键、中间键或鼠标双击如何区分按下的是鼠标左键、右键、中间键或鼠标双击 figure对象的“SelectionType”属性值可以被设置为:normal、extend、alt或open。MATLAB自动维护这个属性,提供在figure窗口中按下鼠标按键时的信息。 normal:表示按下鼠标左键。 extend:表示按下shift+鼠标左键或同时按下鼠标左右键。 alt:表示按下Ctrl+鼠标左键,或者按下鼠标右键,或者鼠标中间键。 open:表示
213、双击鼠标按键。 在图形窗口内按下鼠标按键时,可以通过查询figure对象的“SelectionType”属性来判断按下的是左键、右键、中间键或双击鼠标按键。图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/22if strcmp(get(gcf,SelectionType),normal) msgbox(按下了鼠标左键按下了鼠标左键);elseif strcmp(get(gcf,SelectionType),alt) msgbox(按下了鼠标右键按下了鼠标右键);elseif strcmp(get(gcf,Selec
214、tionType),extend) msgbox(按下了鼠标中间键按下了鼠标中间键);elseif strcmp(get(gcf,SelectionType),open) msgbox(鼠标双击操作鼠标双击操作);end示例代码:示例代码:图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/22三、实现同一三、实现同一GUI内的不同控件之间的数据传递内的不同控件之间的数据传递 1.利用全局变量(利用全局变量(global)进行传递数据)进行传递数据 只要将变量定义为全局变量,所有的MATLAB函数都可以对这些全局变量进
215、行调用和修改,方法简单。global命令的调用格式如下:global X Y Z示例代码:示例代码:global X Y Z %定义全局变量定义全局变量X=10;Y=20;Z=30;global X Y ZA=X;B=Y;C=Z; %使用全局变量使用全局变量disp(X);disp(Y);disp(Z);图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/222、通过通过handles结构进行数据传递结构进行数据传递 在利用GUIDE创建图形用户界面时,MATLAB自动生成并维护一个句柄结构-handles,handl
216、es结构作为各个控件的回调函数的输入参数,handles结构除了用于保存figure以及控件的句柄外,用户还可以把要传递的数据保存到handles结构中,以实现在不同控件之间的传递。示例代码:示例代码:%在控件的回调函数中将数据保存到在控件的回调函数中将数据保存到handles结构中结构中handles.value1=10;handles.value2=20;guidata(hObject,handles); %必须调用必须调用guidata,以更新,以更新handles结构!结构!%在控件的回调函数中引用在控件的回调函数中引用handles结构中保存的数据结构中保存的数据value1=han
217、dles.value1;value2=handles.value2;disp(value1);disp(value2);图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/223、利用利用setappdata和和getappdata函数进行数据函数进行数据传递传递在在MATLAB中中,应应用用程程序序数数据据(application data)允允许许用用户户为为某某一一对对象象设设置置用用户户自自定定义义的的属属性性,这这个个对对象象通通常常是是应应用用程程序序的的figure对对象象,当当然然也也可可以以是是其其它
218、它的的对对象象。因因此此,可可以以利利用用应应用用程程序序数数据据来来在在不不同同控控件件之之间间传递数据。传递数据。常用函数:常用函数:(1)setappdata:用来指定应用程序数据的名称和数值。函数的调用格式为:用来指定应用程序数据的名称和数值。函数的调用格式为:setappdata(h,name,value);其中,其中,h为为figure或或figure内任一控件的句柄;内任一控件的句柄;name和和value分别为应用程序数据的名称和分别为应用程序数据的名称和数值。数值。value可以为任意类型的数据,下同。可以为任意类型的数据,下同。(2)getappdata:用来取得应用程序数
219、据。函数的调用格式为:用来取得应用程序数据。函数的调用格式为:value = getappdata(h,name); %用来取得指定名称(用来取得指定名称(name)的应用程序数据)的应用程序数据values = getappdata(h); %用来取得与对象的句柄用来取得与对象的句柄h相关联的所有的应用程序数据。相关联的所有的应用程序数据。(3)rmappdata:用来删除应用程序数据。其原型定义为:用来删除应用程序数据。其原型定义为:rmappdata(h,name); 图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 202
220、4/9/224、 利用利用figure或控件的或控件的“UserData”属性来传递数据属性来传递数据每每个个figure和和控控件件对对象象都都有有一一个个“UserData”属属性性,用用户户可可以以在在程程序序中中设定其属性值,从而实现不同控件之间数据的传递。设定其属性值,从而实现不同控件之间数据的传递。value=10;%设置设置figure的的UserData属性值属性值set(handles.figure1,userdata,value);%取得取得figure的的UserData属性值属性值value1=get(handles.figure1,userdata);举例:举例:【注
221、意注意】利用利用figure和控件对象的和控件对象的“UserData”属性,用户每次属性,用户每次只能设置一个只能设置一个要传递的数据。要传递的数据。图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/225、利用利用save和和load函数来传递数据函数来传递数据MATLAB提提供供了了save函函数数,用用来来把把数数据据写写入入到到二二进进制制的的MAT文文件件中中;load函函数数用用来来读读取取MAT文文件件中中的的数数据据。利利用用这这两两个个函函数数也也可可以以实实现现数数据据的传递。的传递。两个函数的
222、调用格式为:两个函数的调用格式为:save(filename, var1, var2, .); filename为为mat文件名,文件名,var1,var2,为要保存的变量。为要保存的变量。S=load(filename); S是一个结构体,包含读取的变量值。是一个结构体,包含读取的变量值。函数的调用格式:函数的调用格式:图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/22四、实现不同四、实现不同GUI之间的数据传递之间的数据传递 有多种方法可以实现不同的有多种方法可以实现不同的GUI之间数据的传递:之间数据的传递
223、:1、利用全局(、利用全局(global)变量进行数据传递)变量进行数据传递全局变量的定义和使用见上节。全局变量的定义和使用见上节。2、利用程序的输入、利用程序的输入/输出参数进行数据传递输出参数进行数据传递GUIDE创建的创建的GUI程序,其程序,其M文件的开头有条语句:文件的开头有条语句:function varargout = test(varargin)其中其中varargin和和varargout结构分别作为函数的输入参数和输出参数。结构分别作为函数的输入参数和输出参数。利用利用varargin和和varargout可以传递任意数目的输入参数和输出参数。函可以传递任意数目的输入参数和
224、输出参数。函数被调用时,数被调用时,MATLAB使用使用varargin1来接收函数的第一个输入值,来接收函数的第一个输入值,varargin2来接收函数的第二个输入值,依此类推。同时,来接收函数的第二个输入值,依此类推。同时,MATLAB使用使用varargout1来接收第一个返回值,来接收第一个返回值,varargout2来接收第二个返回来接收第二个返回值,依此类推。值,依此类推。图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/223. 利用利用setappdata和和getappdata函数进行数据传递函数进
225、行数据传递利用这两个函数也可以实现在不同利用这两个函数也可以实现在不同GUI程序之间传递数据。函数的使用方程序之间传递数据。函数的使用方法见上节。法见上节。4. 利用利用save和和load函数进行数据传递函数进行数据传递同样,利用同样,利用save和和load函数也可以实现在不同函数也可以实现在不同GUI程序之间传递数据。使程序之间传递数据。使用方法见上节。用方法见上节。5. uiwait和和uiresume联合使用实现数据从子程序传回主程序联合使用实现数据从子程序传回主程序实现步骤:实现步骤:(1)在子程序的)在子程序的OpeningFcn函数的末尾加上函数的末尾加上uiwait(hand
226、les.figure1); figure1是子程序的是子程序的figure对象的对象的Tag标记。程序运行到此便暂停继续运行,标记。程序运行到此便暂停继续运行,等待用户操作完成等待用户操作完成。图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/22(2)在子程序的)在子程序的OutputFcn中设置要传递出去的数据。例如中设置要传递出去的数据。例如:varargout1 = par1;varargout2 = par2; 其中,其中,par1、par2、 包含要传递给主程序的数据。在包含要传递给主程序的数据。在Out
227、putFcn函数的函数的最后,调用最后,调用delete(handles.figure1)来关闭子程序界面并删除其来关闭子程序界面并删除其figure对象。对象。(3)用户操作完毕,需要子程序返回时,调用)用户操作完毕,需要子程序返回时,调用uiresume(handles.figure1);这时,程序会继续向下运行,调用这时,程序会继续向下运行,调用OutputFcn函数,把数据传给主程序。函数,把数据传给主程序。 图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/22五、在五、在GUI中控制中控制Simulink
228、仿真过程仿真过程 1、案例背景:、案例背景:Simulink环环境境下下常常用用示示波波器器(Floating Scope)来来观观察察仿仿真真的的结结果果。在在很很多多情情况况下下,用用户户希希望望能能通通过过GUI程程序序来来控控制制仿仿真真过过程程,并并把把仿仿真真的的结结果果在在GUI界面上显示。界面上显示。2、编程要点:、编程要点:(1)在在Simulink环境下建立模型文件,为模型中的每个模块设置合适环境下建立模型文件,为模型中的每个模块设置合适的名称。模型文件中最好不要包含中文字符。的名称。模型文件中最好不要包含中文字符。 (2)调用)调用open_system函数打开模型文件。
229、函数打开模型文件。open_system的两种常用调用格式:的两种常用调用格式:open_system(sys);打开指定的系统窗口或子系统窗口。打开指定的系统窗口或子系统窗口。sys是在是在MATLAB路径上的模型路径上的模型名称,可以是模型的全路径名称,也可以是已打开的系统的子系统的相对名称,可以是模型的全路径名称,也可以是已打开的系统的子系统的相对路径名称,例如:路径名称,例如:“engine/Combustion”。图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/22open_system(blk);打开指
230、定的仿真模块的参数设置对话框。如果定义了模块的打开指定的仿真模块的参数设置对话框。如果定义了模块的OpenFcn回调回调函数,则执行该回调函数。函数,则执行该回调函数。 (3)调用)调用set_param函数设置模型中各模块的参数。函数设置模型中各模块的参数。 set_param函数用来设置函数用来设置Simulink系统和模块的参数。其调用格式为:系统和模块的参数。其调用格式为:set_param(obj, parameter1, value1, parameter2, value2, .)其中,其中,obj是仿真系统或模块的路径名,是仿真系统或模块的路径名,parameter1, valu
231、e1, parameter2, value2为要设置的参数及其数值。为要设置的参数及其数值。模型和模块的所有参数见帮助文件的模型和模块的所有参数见帮助文件的“Model and Block Parameters”。set_param(0, modelparm1, value1, modelparm2, value2, .)将指定的模型的参数设置为缺省值,即使用将指定的模型的参数设置为缺省值,即使用Simulink软件创建模型时的软件创建模型时的缺省值。缺省值。图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/22(4
232、)调用调用sim命令启动仿真过程。命令启动仿真过程。 sim函数用来运行模型的仿真。函数用来运行模型的仿真。sim函数的常用格式为:函数的常用格式为:sim(model,timespan,options,ut); 其中,其中,model为模型名称;为模型名称;timespan为仿真的开始时间和结束时间,为仿真的开始时间和结束时间,如果设置为如果设置为,则使用在,则使用在Simulink中设置的开始和结束时间;中设置的开始和结束时间;options为为仿真选项,常用仿真选项,常用simset函数函数来设置一个来设置一个options结构;结构;ut为可选择的参数,为可选择的参数,为外部输入向量。
233、为外部输入向量。 simset函数常用来设置仿真运行的工作空间,工作空间可以为函数常用来设置仿真运行的工作空间,工作空间可以为“base”(基本工作空间)、(基本工作空间)、“current”(调用(调用sim命令的函数工作空命令的函数工作空间)或间)或“parent”(调用(调用sim命令的函数的上一级工作空间)。命令的函数的上一级工作空间)。例如:设置仿真运行的工作空间为例如:设置仿真运行的工作空间为“base”simset(DstWorkspace ,base);(5)将仿真的结果在图形用户界面上显示。)将仿真的结果在图形用户界面上显示。在在GUI程序中调用程序中调用plot等函数,将仿真的结果以图形的形式显示在界面上。等函数,将仿真的结果以图形的形式显示在界面上。图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/22图形用户界面编程图形用户界面编程 刘焕进刘焕进, 合肥工业大学机械与汽车工程学院合肥工业大学机械与汽车工程学院. 2024/9/22谢谢大家!谢谢大家!