GUI设计基础

本文详细介绍了MATLAB中GUI的设计,包括菜单的创建(如一级菜单、子菜单和菜单项的Label和Callback功能)、快捷键设置以及菜单外观的定制,如位置、字体颜色和可见性。
摘要由CSDN通过智能技术生成

层次结构

要学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即可打开,这种方法比较通用,可以先选择一个默认的。

界面大概是这样的,每个版本不一样。

请看下篇

编程代码设计GUI界面-CSDN博客

  • 18
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不吃鱼的羊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值