【matlab】handles深度破解

用过matlab做GUI的人可能者有或者曾经有过这样的疑惑,handles到底是一个什么鬼东西,我又该怎么去操控它。其实handles很简单,只是matlab里的帮助好像把它说的很麻烦罢了。

 

为了说明问题,我们不访拿户籍管理做一个类比吧,我们知道,我们每个人都有一个名字和一个身份证号,我们可以同名,但我们的身份证号是唯一的。小米做的matlab可能就是借用的这种思想(毕竟都是管理嘛,只不过一个管的是人,一个管的是控件而已)。

 

matlab里的每个控件都一个编号,就好像我们的身分证号一样,而且它们在整个程序执行期间都是唯一的。它们是在程序打开时由matlab自动分派,并且这个号在程序执行期间是不可改的。程序关闭后这些编号会被自动撤销(其实就是变量嘛,程序一关变量自然就over了),在下次程序启动时会被重新分派,所以你不要指望这次把这个号记住,下次通过这个号再找出对应的控件。但是记住每个控件的号肯定是一个让人头大的事,所以maltab就又给每个控件一个名字Tag,通过Tag我们很容易记住控件的标识。但是名字名字有一个缺点,就是重名的问题,你叫张三,人家也能叫张三,不过好在都是我们给控件命名的,可以避免这一个问题。除了容易记住这一优点外,Tag还有一个优点就是关闭程序后在下次执行时它还是一样的(Tag可以被人为更改,只要你没有改的话它就是不变的),所以下次启动时我们可以通过Tag来找到我们想要的控件。

 

我们可以看到handles的结构是“Tag:标号”,比如一个控件按钮的Tag是test,标号是100,那么在程序中就有这样一种对应关系test就对应着100,也就是名为test的变量中存着100,而100对应着这个按钮。我们可以更改handles.test的值:

handles.test=99;

guidata(gcf,handles)

但是改过之后你再也不能通过test来找到那个按钮控件了,如果你不幸没有记住那个标号的话,那么你就与那个按钮控件失去联系了。

 

另外,matlab中获取handles的方法有两种,第一个是通过handles=guidata(gcf)来获得,第二种是通过handles=guihandles来获得,那么这两个有什么区别呢?经过测试发现通过uimenu创建一个新的控件,

h=uimenu(hparent,'Tag','mymenu');

此时用handles=guidata(gcf)所得到的handles中不会有handles.mymenu的(matlab帮助上说了),但是用handles=guihandles得到的却会有handles.mymenu.只有加上下面两句话:

handles.mymenu=h;

guidata(gcf,handles);

才会通过handles=guidata(gcf)得到handles.mymenu;

 

还应该注意到guidata得到的handles与guihandles得到的handls是不一样的,不能用guihandles得到的handles来覆盖handles.

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值