• 为了保证你在浏览本网站时有着更好的体验,建议使用类似Chrome、Firefox之类的浏览器~~
    • 如果你喜欢本站的内容何不Ctrl+D收藏一下呢,与大家一起分享各种编程知识~
    • 本网站研究机器学习、计算机视觉、模式识别~当然不局限于此,生命在于折腾,何不年轻时多折腾一下

Matlab GUI教程0x5 -handles结构体用法简介

Matlab admin 3年前 (2016-11-08) 1647次浏览 0个评论 扫描二维码

在本节教程中,我们将讨论什么 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, 下载次数: 2755) 解压到 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 模式了!


Deeplearn, 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明Matlab GUI 教程 0x5 -handles 结构体用法简介
喜欢 (1)
admin
关于作者:
互联网行业码农一枚/业余铲屎官/数码影音爱好者/二次元

您必须 登录 才能发表评论!