精品matlab电子教案10.docx
《精品matlab电子教案10.docx》由会员分享,可在线阅读,更多相关《精品matlab电子教案10.docx(8页珍藏版)》请在冰豆网上搜索。
精品matlab电子教案10
4.2用户界面菜单对象和上下文菜单
菜单对象(Uimenu)(也称下拉式菜单对象)能够使用户在运行应用程序时,从一批功能选项中浏览和选择某项功能。
在MATLAB每一个窗口系统中都有一个主菜单栏,所有的主菜单都列在菜单栏上。
菜单的标题或名字简单地描述了该菜单的功能。
一个菜单项还可用自己的菜单项列表而作为子菜单。
子菜单项在子菜单的标志右边显示小三角或箭头以表示菜单还有更多子菜单项可供选择。
如果子菜单的菜单项被选择,另一个具有更多菜单项的菜单显示在此菜单的右边的下拉菜单中。
有时这种菜单称之行走菜单。
选中其中一个菜单项也引起某些动作的产生。
子菜单可以嵌套,但层次的数目受到窗口系统及有用资源的限制。
4.2.1菜单对象的创建
创建菜单对象有两种方式:
一是基于函数命令的编程方式,二是基于GUI的方式。
(1)基于函数命令的编程方式
自制用户菜单对象,通过函数uimenu创建,可用于创建菜单对象(或称子菜单对象)和命令对象(或称菜单项)。
菜单对象是指自身包含有下一级命令,功能是打开它的子项;而命令对象是指本身不再具有子菜单的功能选项,只对应于某种功能操作。
二者区别在于:
命令对象的Children属性值为空矩阵,而菜单对象的Children属性值为图形窗口句柄值或另一个菜单对象的句柄值。
uimenu函数的调用格式为:
●uimenu('PropertyName1',value1,'PropertyName2',value2,…)在当前图形窗口上部的菜单栏创建一个菜单对象,并返回一个句柄值;
●Hm=uimenu(h,…)以句柄h为父对象的句柄创建一个新菜单,并返回该菜单的句柄值;该父对象必须是图形对象、菜单对象或上下文菜单对象。
通过设定uimenu对象的属性值‘PropertyName',Value这对命令定义了菜单特性。
uimenu对象中最重要的属性是'Label'和'Callback'。
'Label'属性值是菜单条和下拉菜单项上的文本字符串,以确认菜单项。
'Callback'属性值是MATLAB字符串,当选中菜单项时,它传给eval,用以执行。
下面的例子用函数uimenu将简单菜单加到当前的图形窗口中。
这里提出的例子说明如何只用几个MATLAB命令来建立工作菜单。
后面的例子将详细地讨论uimenu的命令和属性。
例1用两个下拉菜单将菜单条加到当前窗口中。
(1)首先,建立名为Example的顶部菜单输入。
Hm_ex=uimenu(gcf,'Label','Example');
在此菜单下有两个菜单项。
第一项标志为Grid,切换坐标轴网格的状态。
Hm_exgrid=uimenu(Hm_ex,'Label','Grid','Callback','Grid');
注意,句柄Hm_ex是用于与上层菜单相关联的。
这项uimenu按eval的要求出现在上层菜单之下。
还需注意的是属性‘Callback‘的值,它是一个带引号的字符串。
Example下的第二项标志为View,并带有子菜单。
Hm_exview=uimenu(Hm_ex,'Label','View');
View菜单有两项选择2-D和3-D视图。
Hm_ex2d=uimenu(Hm_exview,'Label','2-D','Callback','view
(2)');
Hm_ex3d=uimenu(Hm_exview,'Label','3-D','Callback','view(3)');
注意以上这些是View的子菜单,因为它们指定Hm_exview作为其父对象。
(2)将第二个顶层菜单加到标题为Close的菜单条中。
Hm_close=uimenu(gcf,'Label','Close')';
由该顶层菜单Close加入了两个菜单项。
第一项关闭图形窗口,第二项使图形窗口打开,但去掉用户菜单。
Hm_clfig=uimenu(Hm_close,'Label','CloseFigure','Callback','Close');
Hm_clmenu=uimenu(Hm_close,'Label','RemoveMenu','Callback','delete(Hm_ex)');
例2 创建菜单,使图形窗背景颜色设置为兰色或红色。
figure%创建一个图形窗
h_menu=uimenu(gcf,'label','Color');%制作用户顶层菜单项Color
h_submenu1=uimenu(h_menu,'label','Blue',...%制作下拉菜单项Blue
'callback','set(gcf,''Color'',''blue'')');
h_submenu2=uimenu(h_menu,'label','Red',...%制作下拉菜单Red
'callback','set(gcf,''Color'',''red'')');
'Label'属性义定了出现在菜单或菜单项中的标志。
它也可以用来定义MicrosoftWindows系统的快捷键:
标志字符串中,在所需字符前加上&,例如:
Hm_top=uimenu('Label','Example');
uimenu(Hm_top,'Label','&Grid','CallBack','grid');
它定义了键盘上G为快捷键。
菜单项标志将以Grid形式出现在菜单上。
为激活快捷键,在选择图形窗口时按shift键并按下G键。
快捷键不一定是字符串的第一字符。
下例中R为快捷键:
uimenu(Hm_top,'Label','G&rid','CallBack','grid');
则标志以Grid形式出现在菜单上。
同句柄图形函数一样,在建立图形对象时可定义uimenu属性,或用set改变属性。
所有可设定的属性,包括标题、菜单颜色、甚至回调字符串都可以用set来改变。
这种功能十分便于迅速地定制菜单和属性。
属性值仅仅定义了uimenu对象的性质并且控制菜单如何显示;它们也决定了选择菜单项所引起的动作。
(2)基于GUI的方式
MATLAB为用户提供了简单方便的菜单对象编辑器。
直接在MATLAB命令窗口中键入guide,或单击菜单File/new/GUI便可打开一个用于设计图形对象的GUI工具集窗口,如图4.2所示。
单击菜单Tools/MenuEditer,或直接单击工具栏上的
按钮,即可打开菜单编辑器,见图4.3
图4.2GUI设计工具集
图4.3菜单编辑器
图中最上面有八个按钮,前三个分别是:
NewMenu新建一个菜单
NewMenuItem新建一个子菜单项
NewContextMenu新建一个上下文菜单
后四个是子菜单的移动选项,最后一个是删除选定的菜单栏。
左边窗口给出当前图形中的菜单项列表,右边给出相应的对象属性,分别是菜单项的标注(Label)、标记(Tag)和回调程序(Callback)的内容。
用户可直接对之进行修改和添加。
回调程序(Callback)的属性值是一个MATLAB字符串,其内容可以是MATLAB的函数、命令和可执行的表达式,也可调用自己编写的M文件(函数)。
MATLAB将它传给函数eval并在命令窗口工作空间执行。
4.2.2菜单对象的属性
菜单对象的属性可分为公共属性、基本控制属性和Callback管理属性三部分。
下面给出一些重要属性的设置方法。
●Label和Callback
这是菜单对象的基本属性,编写一个具有基本功能的菜单对象必须要设置Label和Callback属性。
Label是在菜单项上显示的标注文本,在文本中同时可以设置该菜单项的快捷键。
属性Callback用来设置菜单回调程序。
例如
H1=uimenu('label','&Draw');%在当前图形窗口的菜单条上建立一个菜单Draw,并设置其快捷键;
H1_1=uimenu(H1,'label','&Gridon','callback','gridon');%此命令建立的菜单项为Gridon,快捷键为Shift+g,回调程序Gridon用于给所画出的图添加网格。
●Position
该属性用于调整菜单项的相对位置。
例如,在菜单Draw下增加一个新的子菜单Gridoff,比较和子菜单项Gridon的属性Position值,在MATLAB命令窗口中键入:
H1_2=uimenu(H1,'label','Gride&off','callback','gridoff');
get(H1_1,'position')
ans=1
get(H1_2,'position')
ans=2
可以看出,属性position的值等于菜单项的排列顺序。
当需要调整相对位置时,可以用set函数设置。
get(H1,'position')%顶部菜单栏上横向排列的菜单位置
set(H1,'position',3)%改变单栏上横向排列的菜单位置
●Checked和Separator
Checked属性用于设置是否在菜单项前添加选中标记,设为“on”表示添加,“off”表示不添加。
例如
set(H1_1,'checked','on');%子菜单Gridon前添加选中标记
属性Separator用于在菜单项之间添加分隔符,以便使菜单更加清晰。
●BackgroundColor和ForegroundColor
这两个属性均为RGB向量,BackgroundColor(背景色)是菜单本身的颜色,BackgroundColor(前景色)是菜单上标注字符串的颜色。
下面通过一个实例具体说明如何制作菜单对象的用户界面。
例3建立一个只包含用户界面菜单项的图形界面,并可执行菜单项的相应功能,分别绘制Membrane、三维高斯分布Peaks和sinc函数(草帽图)图形。
(1)基于函数命令的编程方式
首先建立一个图形窗口,去掉窗口本身包含的菜单条和工具条,命名为DrawGUI
h0=figure('Menubar','none','toolbar','none','Name','DrawGUI');
从左到右依次建立各菜单。
先建立Draw下的子菜单
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:
.5:
5);',...
'r=sqrt(x.^2+y.^2)+eps;',...
'z=sin(r)./r;',...
'surf(x,y,z);']);
其次建立第二个菜单ColorMap,包含Cool(冷色调)、Hot(暖色调)和Default(缺省值)3个子菜单。
当某个选项被选中时,添加选中标记,同时去掉其它选项的选中标记
h2=uimenu(h0,'Label','&ColorMap');h22
(1)=uimenu(h2,'Label','&Hot','Accelerator','h','Checked','on',...'Callback',...
['set(h22,''Checked'',''off'');',...
'set(h22
(1),''Checked'',''on'');',...
'colormap(hot)']);h