第7章 MATLAB图形用户界面设计 7.1 菜单设计 7.2 对话框设计 7.3 用户界面设计工具
7.1 菜单设计 7.1.1 用户菜单的建立 建立一级菜单项的函数调用形式为: 一级菜单项句柄=uimenu(图形窗口句柄,属性名1,属性值1,属性名2,属性值2,…) 建立子菜单项的函数调用形式为: 子菜单项句柄=uimenu(一级菜单项句柄,属性名1,属性值1,属性名2,属性值2,…)
7.1.2 菜单对象常用属性 菜单对象具有Children、Parent、Tag、Type、UserData、Visible等公共属性。除公共属性外,还有一些常用的特殊属性。
例7.1建立“图形演示系统”菜单。菜单条中含有3个菜单项:Plot、Option和Quit。Plot中有Sine Wave和Cosine Wave两个子菜单项,分别控制在本图形窗口画出正弦和余弦曲线。Option菜单项的内容如图7.1所示。其中Grid on和Grid off控制给坐标轴加网格线,Box on和Box off控制给坐标轴加边框,而且这4项只有在画有曲线时才是可选的。Figure Color控制图形窗口背景颜色。Quit控制是否退出系统。 程序如下: screen=get(0,'ScreenSize'); W=screen(3);H=screen(4); figure('Color',[1,1,1],'Position',[0.2*H,0.2*H,0.6*W,0.4*H],... 'Name','图形演示系统','NumberTitle','off','MenuBar','none'); %定义Plot菜单项 hplot=uimenu(gcf,'Label','&Plot'); uimenu(hplot,'Label','Sine Wave','Call',['t=-pi:pi/20:pi;','plot(t,sin(t));',... 'set(hgon,''Enable'',''on'');','set(hgoff,''Enable'',''on'');',... 'set(hbon,''Enable'',''on'');','set(hboff,''Enable'',''on'');']); uimenu(hplot,'Label','Cosine Wave','Call',['t=-pi:pi/20:pi;','plot(t,cos(t));',... %定义Option菜单项 hoption=uimenu(gcf,'Label','&Option'); hgon=uimenu(hoption,'Label','&Grig on','Call','grid on','Enable','off'); hgoff=uimenu(hoption,'Label','&Grig off','Call','grid off','Enable','off'); hbon=uimenu(hoption,'Label','&Box on','separator','on','Call','box on','Enable','off'); hboff=uimenu(hoption,'Label','&Box off','Call','box off','Enable','off'); hfigcor=uimenu(hoption,'Label','&Figure Color','Separator','on'); uimenu(hfigcor,'Label','&Red','Accelerator','r','Call','set(gcf,''Color'',''r'');'); uimenu(hfigcor,'Label','&Blue','Accelerator','b','Call','set(gcf,''Color'',''b'');'); uimenu(hfigcor,'Label','&Yellow','Call','set(gcf,''Color'',''y'');'); uimenu(hfigcor,'Label','&White','Call','set(gcf,''Color'',''w'');'); %定义Quit菜单项 uimenu(gcf,'Label','&Quit','Call','close(gcf)');
7.1.3 快捷菜单 在MATLAB中,可以使用uicontextmenu函数和图形对象的UIContextMenu属性来建立快捷菜单,具体步骤为: (1)利用uicontextmenu函数建立快捷菜单。 (2)利用uimenu函数为快捷菜单建立菜单项。 (3)利用set函数将该快捷菜单和某图形对象联系起来。
例7.2 绘制曲线y=2e-0.5xsin(2πx),并建立一个与之相联系的快捷菜单,用以控制曲线的线型和曲线宽度。 程序如下: x=0:pi/100:2*pi; y=2*exp(-0.5*x).*sin(2*pi*x); hl=plot(x,y); hc=uicontextmenu; %建立快捷菜单 hls=uimenu(hc,'Label','线型'); %建立菜单项 hlw=uimenu(hc,'Label','线宽'); uimenu(hls,'Label','虚线','Call','set(hl,''LineStyle'','':'');'); uimenu(hls,'Label','实线','Call','set(hl,''LineStyle'',''-'');'); uimenu(hlw,'Label','加宽','Call','set(hl,''LineWidth'',2);'); uimenu(hlw,'Label','变细','Call','set(hl,''LineWidth'',0.5);'); set(hl,'UIContextMenu',hc); %将该快捷菜单和曲线对象联系起来
7.2 对话框设计 7.2.1 对话框的控件 (1)按钮(Push Button)。 (2)双位按钮(Toggle Button)。 (3)单选按钮(Radio Button)。 (4)复选框(Check Box)。 (5)列表框(List Box)。 (6)弹出框(Popup Menu)。 (7)编辑框(Edit Box)。 (8)滑动条(Slider)。 (9)静态文本(Static Text)。 (10)边框(Frame)。
7.2.2 对话框的设计 1. 建立控件对象 MATLAB提供了用于建立控件对象的函数uicontrol,其调用格式为: 对象句柄=uicontrol(图形窗口句柄,属性名1,属性值1,属性名2,属性值2,…) 其中各个属性名及可取的值和前面介绍的uimenu函数相似,但也不尽相同,下面将介绍一些常用的属性。 2. 控件对象的属性 MATLAB的10种控件对象使用相同的属性类型,但是这些属性对于不同类型的控件对象,其含义不尽相同。除Children、Parent、Tag、Type、UserData、Visible等公共属性外,还有一些常用的特殊属性。
hf=figure('Color',[0,1,1],'Position',[100,200,400,200],... 例7.3 建立数制转换对话框。在左边输入一个十进制整数和2~16之间的数,单击“转换”按钮能在右边得到十进制数所对应的2~16进制字符串,单击“退出”按钮退出对话框。 程序如下: hf=figure('Color',[0,1,1],'Position',[100,200,400,200],... 'Name','数制转换','NumberTitle','off','MenuBar','none'); uicontrol(hf,'Style','Text', 'Units','normalized',... 'Position',[0.05,0.8,0.45,0.1],'Horizontal','center',... 'String','输 入 框','Back',[0,1,1]); uicontrol(hf,'Style','Text','Position',[0.5,0.8,0.45,0.1],... 'Units','normalized','Horizontal','center',... 'String','输 出 框','Back',[0,1,1]); uicontrol(hf,'Style','Frame','Position',[0.04,0.33,0.45,0.45],... 'Units','normalized','Back',[1,1,0]); uicontrol(hf,'Style','Text','Position',[0.05,0.6,0.25,0.1],... 'String','十进制数','Back',[1,1,0]); uicontrol(hf,'Style','Text','Position',[0.05,0.4,0.25,0.1],... 'String','2~16进制','Back',[1,1,0]); he1=uicontrol(hf,'Style','Edit','Position',[0.25,0.6,0.2,0.1],... 'Units','normalized','Back',[0,1,0]); he2=uicontrol(hf,'Style','Edit','Position',[0.25,0.4,0.2,0.1],... uicontrol(hf,'Style','Frame','Position',[0.52,0.33,0.45,0.45],... ht=uicontrol(hf,'Style','Text','Position',[0.6,0.5,0.3,0.1],... 'Units','normalized','Horizontal','center','Back',[0,1,0]); COMM=['n=str2num(get(he1,''String''));','b=str2num(get(he2,''String''));',... 'dec=trdec(n,b);','set(ht,''string'',dec);']; uicontrol(hf,'Style','Push','Position',[0.18,0.1,0.2,0.12],... 'String','转 换','Units','normalized','Call',COMM); uicontrol(hf,'Style','Push','Position',[0.65,0.1,0.2,0.12],... 'String','退 出','Units','normalized','Call','close(hf)');
程序调用了trdec.m函数文件,该函数的作用是将任意十进制整数转换为2~16进制字符串。trdec.m函数文件如下: function dec=trdec(n,b) ch1='0123456789ABCDEF'; %十六进制的16个符号 k=1; while n~=0 %不断除某进制基数取余直到商为0 p(k)=rem(n,b); n=fix(n/b); k=k+1; end k=k-1; strdec=''; while k>=1 %形成某进制数的字符串 kb=p(k); strdec=strcat(strdec,ch1(kb+1:kb+1)); dec=strdec;
例7.4 建立图形演示对话框。在编辑框输入绘图命令,单击“绘图”按钮能在左边坐标轴得到所对应的图形,弹出框提供色图控制,列表框提供坐标网格线和坐标边框控制。 程序如下: clf; set(gcf,'Unit','normalized','Position',[0.2,0.3,0.65,0.35]); set(gcf,'Menubar','none','Name','图形演示','NumberTitle','off'); axes('Position',[0.05,0.15,0.55,0.7]); uicontrol(gcf,'Style','text', 'Unit','normalized',... 'Posi',[0.63,0.85,0.2,0.1],'String','输入绘图命令','Horizontal','center'); hedit=uicontrol(gcf,'Style','edit','Unit','normalized','Posi',[0.63,0.15,0.2,0.68],... 'Max',2); %Max取2,使Max-Min>1,从而允许多行输入 hpopup=uicontrol(gcf,'Style','popup','Unit','normalized',... 'Posi',[0.85,0.8,0.15,0.15],'String','Spring|Summer|Autumn|Winter'); hlist=uicontrol(gcf,'Style','list','Unit','normalized',... 'Posi',[0.85,0.55,0.15,0.25],'String','Grid on|Grid off|Box on|Box off'); hpush1=uicontrol(gcf,'Style','push','Unit','normalized',... 'Posi',[0.85,0.35,0.15,0.15],'String','绘 图'); uicontrol(gcf,'Style','push','Unit','normalized',... 'Posi',[0.85,0.15,0.15,0.15],'String','关 闭','Call','close all'); set(hpush1,'Call','COMM(hedit,hpopup,hlist)'); set(hlist,'Call','COMM(hedit,hpopup,hlist)'); set(hpopup,'Call','COMM(hedit,hpopup,hlist)'); COMM.m函数文件: function COMM(hedit,hpopup,hlist) com=get(hedit,'String'); n1=get(hpopup,'Value'); n2=get(hlist,'Value'); if ~isempty(com) %编辑框输入非空时 eval(com'); %执行从编辑框输入的命令 chpop={'spring','summer','autumn','winter'}; chlist={'grid on','grid off','box on','box off'}; colormap(eval(chpop{n1})); eval(chlist{n2}); end
7.3 用户界面设计工具 7.3.1 图形界面控制面板 7.3.2 属性编辑器 7.3.3 事件过程编辑器 7.3.4 菜单编辑器 7.4.5 位置调整工具
例7.5 利用界面设计工具设计用户界面。具体要求是: (1)在编辑框输入形成数据z的命令,然后选择三个按钮中的一个,即可绘制出z的图形。 (2)选择弹出框中的某个色图,能及时地更改绘图的颜色。 (3)在图形窗口缺省的菜单条上添加一个菜单项Options,Options下又有两个子菜单项White和Red,选中White项时,图形窗口将变成白色,选中Red项时,图形窗口将变成红色。 操作步骤如下: (1)打开图形界面控制面板,添加有关图形对象。 (2)利用属性编辑器,设置图形对象的属性。 (3)添加Options菜单项。