matlab handles结构体及用法

在本节教程中,我们 将讨论什么handles结构体,以及 如何使用set/get命令。如果您压根没有接触过GUI编程,建议您先看下这篇文章 http://www.matlabsky.com/thread-5217-1-1.html,另外一些 MATLAB基础知识也是需要的!

当面打开一个GUI程序的*.m文件时,你肯定会注意到基本所有的function中都有handles这个参数,那个这个handles到底是什么东西呢,下面我们就揭开它什么的面纱!

其实 handles结构体是一个 以GUI中所有控件的Tag属性为字段的结构体,每个字段的取值就是对应控件的 句柄

哦, 什么是句柄呀

呵呵,刚开始听句柄这个名词的时候的确有些不习惯,简单的说句柄 类似于C语言中指针,它是某个对象的唯一标识符,通过句柄就可以找到你需要的对象了,图形对象的句柄一个 double型数据

比如说,一个GUI中有三个控件,对应的Tag属性和句柄分别为tag1和h1,tag2和h2,tag3和h3,那么此时handles结构体则具有如下形式

handles.tag1==h1
handles.tag2==h2
handles.tag3==h3

换句话说handles.tag1就是指向Tag属性值为tag1的控件,handles.tag1(句柄)就是该控件的唯一标识符!

当然我们可以 手工为handles结构体添加新的字段,不过需要使用 guidata(hObject,handles)对更新后的结构体进行保存,哦,这些都是后话了,等我们遇到再说吧!


下面正式开始本节教程的主要内容!

1、首先下载现在本GUI程序 GUI_handles.zip(3.57 KB, 下载次数: 2900)解压到Matlab当前目录或搜索路径下

2、在Command Window中输入guide,然后回车打开“GUIDE Quick Start”对话框



3、选择“Open Existing GUI”,点击“Browser”,选择刚才解压的handles_tutorial.fig文件



4、打开的GUI界面如下图所示



5、handles结构体保存了窗体中所有Pushbutton,Radiobutton,StaticText,以及Figure 自身等控件的句柄。

如何读取这些句柄呢?这里主要有三种方法。点击GUIDE工具栏的 按钮,此时自动打开对应的M文件。在76行行号右边点击下,为 程序设置一个断点



或者在76行后面添加一个keyboard命令,如下所示



还有就是使用dbstop命令,由于相对比较繁琐,感兴趣的网友请自己查看Matlab帮助。

三种方法都是为了达到通过一个目的,就是程 序执行到76行时暂停,Matlab并自动切换到断点所在函数的workspace,此时我们直接在命令行查看某些数据(这也是我们调试程序重要方法)。

6、本程序就使用第二种方法,也就是在76行后添加keyboard命令

7、保存修改后的程序,运行GUI,然后点击Push Button按钮



8、此时Command Window会自动弹出,此时命令行提示符改为“K>>”,它表示程序当前处于keyboard模式,及如下所示



9、查看断点所在工作空间的变量,在Command Window中键入whos,该函数将列出Current Workspace中的所有变量



10、好下面我们仔细看看下handles结构体的真面目,在命令行键入handles,此时Matlab会给出handles结构体的详细信息。你会发现GUI中所有控件一个都没有落下。



其中“:”之前的控件的Tag,之后的是控件句柄,意思就是说handles结构体text1字段保存控件text1的句柄3.0095。

11、如果你想进一步获取radiobutton1的属性,此时需要使用get()函数,get是用来获取控件属性的
  1. get(handles.radiobutton1) % 如果没有指定属性,默认返回所有属性
复制代码


12、假如说,我们只对radiobutton1的string属性兴趣的话,则可以使用
  1. get(handles.radiobutton1,'string') % 获取指定属性
复制代码


13、如果想修改radiobutton1的string属性,则需要使用set()函数
  1. set(handles.radiobutton1,'string','hello world') % set(句柄,'属性名',属性值)
复制代码


看看原来radiobutton1的显示字符串是不是立即变为“hello world”了



14、同理我们可以修改GUI控件的其它属性
  1. set(handles.radiobutton1,'String', 'The button is changed!')
  2. set(handles.radiobutton1,'BackGroundColor',[1,.3,1]) % 背景颜色
复制代码


运行结果如下图所示



15、在Command Window中输入return语句,此时程序会交给Matlab,不再是刚才的keyboard模式了!
收藏收藏49 分享分享5 鲜花鲜花25
  • 25
    点赞
  • 160
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值