uimenu 菜单及设计
1.uimenu 菜单及设计
菜单是动态呈现的选择列表,它对应于相关方法(常称为命令)或GUI状态。菜单可以包含其他菜单或者菜单项,也可以包含菜单(即分层的菜单),表示可以执行的命令或所选择的GUI状态。菜单可以与应用程序的菜单栏相关,也可以漂浮在应用程序窗口之上,形成弹出式菜单。
1.1建立用户菜单
MATLAB的各个图形窗口有自己的菜单栏,包括File,Edit,Windows和Help等菜单项。为了建立用户自己的菜单系统,可以先将图形窗口的MenuBar属性事先设置为none,以取消图形窗口默认的菜单,然后再建立用户自己的菜单。要建立用户菜单可用uimenu函数,uimenu函数的调用格式为
H = uimenu(Hp,属性名1,属性值1,属性名2,属性值2, …)
其功能为创建句柄值为 Hm 的自定义的用户菜单。Hp为其父对象的句柄,属性名和属性值构成属性二元对,定义用户菜单的属性。
该函数可以用于建立一级菜单项和子菜单项。建立一级菜单项的函数调用格式为
一级菜单项句柄 = uimenu(图形窗口句柄,属性名1,属性值1,属性名2,属性值2,…)
建立子菜单项的函数调用格式为
子菜单项句柄 = uimenu(一级菜单项句柄,属性名1,属性值1,属性名2,属性值2,…)
在MATLAB还可以进行隐藏和显示标准菜单的操作,其常用的指令如下:
创建图形窗: h= Figure;
隐去标准菜单使用命令: set(h, ‘MenuBar’, ‘none’); set( gcf , ‘menubar’ , menubar) ;
恢复标准菜单使用命令: set( gcf, ‘menubar’, ‘figure’)。
建立一个菜单系统
screen = get(0, 'ScreenSize');
W = screen(3);H= screen(4);
hf = figure( 'Color',[1,1,1],'Position',[1,1,0.4*W,0.3* H],...
'Name','菜单示例','NumberTitle', 'off', 'MenuBar', 'none');
hfile= uimenu(hf, 'label','&文件');
hhelp= uimenu(hf, 'label','&帮助');
uimenu(hfile, 'label', '&新建','callback', 'disp("New Item")');
uimenu(hfile, 'label', '&打开','callback', 'disp( "Open Item")');
hsave = uimenu(hfile, 'label', '&保存','Enable', 'off');
uimenu(hsave, 'label', 'Text file', 'callback', 'k1 = 0;k2 = 1;file01;');
uimenu( hsave, 'label', 'Graphics file', 'callback', 'k1= 1;k2= 0;file10;');
uimenu(hfile, 'label', '&保存到','callback', 'disp("Save As Item")');
uimenu(hfile, 'label', '&退出','separator', 'on', 'callback', 'close(hf)');
uimenu(hhelp, 'label', '关于','callback',['disp( "Help Item");','set(hsave, "Enable", "on")']);
结果显示:
2.菜单对象常用属性
菜单对象除具有Children(子对象)、Parent(父对象)、Tag(标签)、Type(类型)、UserData(用户数据)、Enable(使能)和Visible(可见性)等公共属性,还有一些常用的特殊属性,如回调(Callback)属性和菜单名(Label)。另外,用户菜单的外观有四个属性:Position(位置) ,Separator(分隔线) ,Checked(检录符)和ForeGroundColor( 前景颜色)。
下图中列出了MATLAB 4.2版本中的uimenu对象的属性及其属性值。注意:带
有“*”的属性是非文件式的,使用时需加小心;在括号“{ }”内的属性值是默认值。
例 Callback 属性示例,在图形窗上自制一个名为Callback 的“顶层莱单项”,当用鼠标单击该菜单项时,将产生一个带分格的封闭坐标轴。通过本例说明回调属性的运作机理、用户顶层菜单项的制作、uimenu属性的设置方法以及复杂字符串的构成方法和注意事项。
在MATLAB指令窗中运行以下程序可产生带分格的封闭坐标轴:
grid on, set(gca, 'box', 'on')
在MATLAB指令窗中用以下eval指令可产生与上面相同的界面:
eval( 'grid on, set(gca, "box","on")')
- 方法一:
uimenu( 'label', 'Callback ','Callback', 'grid on, set(gca, 'box','on')% 直接连续表示法
- 方法二:
uimenu( 'Label', 'Example',...
%方括号续行号表示法
'Callback',['grid on,',...
'set(gca, "box", "on");'])
- 方法三:
MnE = 'Example';
%串变量法
GB=['grid on,','set(gca, "box", "on"), '];
uimenu( 'Label', MnE, 'Callback' ,GB)
- 方法四:
Mgui.Label = 'Example';
%构架法
Mgui.Callback = ['grid on; ', 'set(gca, "box","on");'];
uimenu( Mgui)
例 Position 和Separator属性示例,设计要求:把用户菜单Option设置为顶层的第三菜单项;下拉菜单被两条分隔线分为三个菜单区;最下菜单项又由两个子菜单组成。
程序命令如下:
figure
h_menu= uimenu( 'label' ,'Option' ,'Position' ,3);
h_subl = uimenu(h_menu, 'label', 'grid on', 'callback', 'grid on');
h_sub2 = uimenu(h_menu, 'label' ,'grid off','callback' ,'grid off');
h_sub3= uimenu(h_menu, 'label', 'box on','callback', 'box on','separator', 'on' );
h_sub4= uimenu(h_menu, 'label', 'box off', 'callback' ,'box off' );
h_sub5 = uimenu(h_menu, 'label', '颜色', 'Separator', 'on' );
h_subsubl = uimenu(h_sub5, 'label', '红色' ,'ForeGroundColor' ,'r','callback','set(gcf, "Color", "r")');
h_subsub2 = uimenu(h_sub5, 'label', '复位','callback' ,'set(gcf, "Color", "W")');
例 Checked 属性示例,当某菜单项被选中后,使该菜单项贴上检录符“√”。
程序命令如下:
figure
hm0=uimenu( 'label', 'option');
h1 = uimenu(hm0, 'label', '显示网格',...
'callback',[...
'grid on;',...
'set(h1, "checked", "on");'....
'set(h2, "checked", "off");'...
]);
h2 = uimenu(hm0, 'label', '不显示网格',...
'callback',[...
'grid off;',...
'set(h2, "checked", "on"),'...
'set(h1, "checked", "off"),'...
]);
例 Enable 和Visible属性示例。
程序命令如下:
clc;clear;close all;
h_menu= uimenu( 'label' , 'option' );
h_sub1 = uimenu(h_menu, 'label', 'Axis on' );
h_sub2 = uimenu(h_menu, 'label' ,'Axis off','enable', 'off');
set(h_sub1, 'callback' ,['axis on;','set(h_sub1, "enable", "off");','set(h_sub2, "enable", "on")']);
set(h_sub2, 'callback' ,['axis off;','set(h_sub1, "enable", "on");','set(h_sub2, "enable","off")']);
1.2 上下文菜单的建立
用鼠标右键单击某对象时在屏幕上弹出的菜单叫作上下文菜单。这种菜单出现的位置是不固定的,而且总是和某个图形对象相联系。在MATLAB中,可以使用uicontextmenu函数和图形对象的UIContextMenu属性来建立上下文菜单,具体步骤如下:
- 利用uicontextmenu函数建立上下文菜单,格式为
he= uicontextmenu:其功能建立上下文菜单,并将句柄值赋给变量hc。
- 利用uimenu函数为上下文菜单建立菜单项,格式为
uimenu(‘上下文菜单名’,属性名,属性…):其功能为创建的上下文菜单赋值,其 中属性名和属性值构成属性二元对。
- 利用set函数将该上下文菜单和某图形对象联系起来。
例 绘制曲线 y=3e-0.6x*sin(2 pix),并建立一个与之相联系的上下文菜单,用以控制曲线的线型和曲线宽度。
程序命令如下:
clc;clear;close all;
x = 0:pi/100:2*pi;
y = 3*exp(-0.6*x).*sin(2*pi*x);
h1 = plot(x,y);
hc = uicontextmenu; %建立上下文菜单
hls= uimenu(hc, 'Label', '线型'); %建立莱单项
hlw= uimenu(hc, 'Label', '线宽');
uimenu(hls, 'Label', '虚线', 'callback', 'set(h1, "LineStyle",":");');
uimenu(hls, 'Label', '实线', 'callback', 'set(h1, "LineStyle","-");');
uimenu(hlw, 'Label', '加宽', 'callback', 'set(h1, "LineWidth",2);');
uimenu(hlw, 'Label', '变细', 'callback', 'set(h1, "LineWidth",0.5);');
set(h1, 'UIContextMenu' , hc);%将该上下文菜单和曲线对象联系起来
2401_83391393: 请问在MATLAB中是把这几段代码复制粘贴顺序是什么呢,怎么运行不出来呢
2301_81487463: 作者大大在吗
yyds14: 我想问为什么M的高三位为0
去码头整点薯条481: 怎么设置多行可编辑文本框
m0_73945109: 左侧索引与右侧大小不兼容怎么解决