层次结构
要学GUI,大概先知道它的层次结构,如下图所示,我们要设计的就是下面这个几个东西。
菜单uimenu
建立
建立一级菜单项的函数调用格式:
hm=uimenu(h_parent,'PropertyNamel',valuel,'propertyName2',value2,...);
hm 是由 uimenu 生成的菜单项的句柄,通过设定uimenu对象的属性值PropertyName和PropertyValue定义菜单特性。h_parent 是默认的父辈图形对象的句柄。
建立子菜单项的函数调用格式:
hmsub=uimenu(hm,'PropertyNamel',valuel,'PropertyName2',value2,...);
hmsub是由uimenu生成的菜单项的句柄,通过设定uimenu对象的属性值PropertyName和PropertyValue定菜单特性。hm 是一级菜单项柄。
最重要的属性是Label和Callback,Label 确认菜单项。Callback当选中菜单项时,传给eval用以执行命令。
hmE=uimenu(gcf,'Label','Example');%建立一级菜单
hmEsub1=uimenu(hmE,'Label','Grid','Callback','grid on');
%建立二级菜单,在点击的时候调用Callback里面的命令
hmEsub2=uimenu(hmE,'Label','View');
hmEsub21=uimenu(hmEsub2,'Label','sin','Callback','plot(sin([0:0.1:2*pi]),"r")');
%单双引号相互嵌套的时候要切换使用,譬如单引号里面就用双引号
hmEsub22=uimenu(hmEsub2,'Label','cos','Callback','plot(cos([0:0.1:2*pi]),"b")');
hmEsub3=uimenu(hmE,'Label','Hold','Callback','hold');
hmC=uimenu(gcf,'Label','close');
hmCsub1=uimenu(hmC,'Label','Remove Example Menu','Callback','delete(hmE);drawnow');
hmCsub2=uimenu(hmC,'Label','Close Figure','Callback','close');
然后就是选择菜单项执行,就会产生对应的效果。
快捷键
hmE=uimenu(gcf,'label','&Color');%Alt + C展开菜单
%hmE=uimenu(gcf,'label','Co&lor');%Alt + L展开菜单
hmEsub1=uimenu(hmE,'label',"&Blue","callback",'set(gcf,"color","blue")');%Alt + B执行菜单项
hmEsub2=uimenu(hmE,'label',"Red","callback",'set(gcf,"color","Red")','Accelerator','r');%Ctrl + R执行菜单项
%hmEsub2=uimenu(hmE,'label',"Red","callback",'set(gcf,"color","Red")');%这样就没有快捷键
外观
可以控制菜单条删除和恢复,设置位置,字体颜色等。
figure;
set(gcf,'menubar','none');%删除原有菜单条
set(gcf,'menubar','figure');%恢复菜单条
hmO=uimenu('label','Option','Position',5);%将菜单放在第5位
hmOsubl=uimenu(hmO,'label','grid on','callback','grid on');
hmOsub2=uimenu(hmO,'label','grid off','callback','grid off');
hmOsub3=uimenu (hmO,'label','box on','callback','box on','separator','on');%上面插一条分隔线
hmOsub4=uimenu(hmO,'label','box off','callback','box off');
hmOsub5=uimenu(hmO,'label','Figure Color','separator','on');
hmOsub52=uimenu(hmOsub5, 'label','Red','ForeGroundColor','r','callback','set(gcf, "Color","r")');%选项颜色显示为红色
hmOsub51=uimenu(hmOsub5, 'label','white','ForeGroundColor','w','callback','set(gcf, "Color","w")');
hmOsub6=uimenu(hmO,'label','check');
hmOsub61=uimenu(hmOsub6, 'label','look');
hmOsub62=uimenu(hmOsub6, 'label','check on','callback','set(hmOsub61,"check","on")');%显示打勾
hmOsub63=uimenu(hmOsub6, 'label','check off','callback','set(hmOsub61,"check","off")');%关闭打勾
Pos_hmO=get(hmO,'Position');%查询菜单位置
Pos_hmOsub51=get(hmOsub5,'Position');%查询字菜单位置
可以控制菜单项的隐藏和使能
hmO=uimenu('label','Option');
hmOsub1=uimenu(hmO,'label','Axis on');%产生Axis on 菜单项,由默认设置可用
hmOsub2=uimenu(hmO,'label','Axis off','enable','off');%产生Axis off 菜单项,但不可用
hmOsub3=uimenu(hmO,'label','Grid on','separator','on','visible','off');%产生与上分隔的Grid on 莱单项,不可见
hmOsub4=uimenu(hmO,'label','Grid off','visible','off');%产生 Grid off 莱单项,但不可见
set(hmOsub1,'callback',[...
'axis on;'...%每一行都要分别用引号引起来
'set(hmOsub1,"enable","off");'...%Axis on 菜单项不可用
'set(hmOsub2,"enable","on");'...%Axis off 菜单项可用
'set(hmOsub3,"visible","on");'...%Grid on 菜单项可见
'set(hmOsub4,"visible","on");']);%有[]就不用再用一层引号
set(hmOsub2,'callback',[...
'axis off;'...
'set(hmOsub1,"enable","on");'...
'set(hmOsub2,"enable","off");'...
'set(hmOsub3,"visible","off");'...
'set(hmOsub4,"visible","off");']);
set(hmOsub3,'callback',[...
'grid on;'...
'set(hmOsub3,"enable","off");'...
'set(hmOsub4,"enable","on");']);
set(hmOsub4,"callback",[...
'grid off;'...
'set(hmOsub3,"enable","on");'...
'set(hmOsub4,"enable","off");']);
打开GUIDE界面
在命令行输入guide即可打开,这种方法比较通用,可以先选择一个默认的。
界面大概是这样的,每个版本不一样。
请看下篇