MATLAB handles

一、 handles定义

MATLAB中handles结构体是一个以GUI中所有控件的Tag属性为字段的结构体,同一个.fig下的所有控件,均可挂载在handles下。

句柄类似与C语言中的指针,是某个对象的唯一标识符,通过句柄可以找到需要的对象,图像对象的句柄是一个double型数据。

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

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

二、 handles相关函数

1. 添加新字段并赋值

不止控件可写入handles结构体,自定义变量也可以写入handles,作为全局变量

某些变量需要在不同函数之间传递,只有写入handles结构,才能作为全局变量被保存并可以被其他控件的回调函数调用,否则只是一个函数中的参数。

定义格式:

handles.Name = X; % Name可以自定,X为需要保存的value;

2. 更改变量属性

set(handles.Name,'xxx','a') % xxx为属性名,a为该属性对应值

3. 保存数据

guidata(hObject, handles); % hObject是执行回调控件对象的句柄

4. 获取控件属性: get()函数

例:获取radiobutton1的属性,需要使用get()函数

get(句柄)

get(句柄,'属性名')

get(handles.radiobutton1); % 如果没有指定属性,默认返回所有属性

get(handles.radiobutton1,'string'); % 我们只关注radiobutton1的string属性的话,可以使用获取指定属性

5. 修改控件属性:set()函数

例:修改radiobutton1的string属性,需要使用set()函数

set(句柄, '属性名', 属性值)

set(handles.radiobutton1,'string','hello world'); % 原来radiobutton1的显示字符串立即变为"hello world"

三、数据在不同控件间的传递

每一个控件的回调函数头(以按钮pushbutton1为例):

function pushbutton1_Callback(hObject, eventdata, handles)

% hObject:是与这个回调函数callback所关联的控件的handles,在它自己的callback下,可以用代号->hObject来调用它

我们只需要知道,控件自己的回调函数调用自己的属性,只用 hObject.属性名 就可以了

% eventdata:是MATLAB的保留参数(一般不考虑)

% handles:这个GUI界面的代号。可以通过它获取界面的信息。所以在控件A自己的回调函数中,要获取或者设置其他控件的属性,就用handles.其他控件Tag.属性

handles, hObject 都是结构体

重点:如何传递?

如何将自己计算出或者需要用到的数据(或变量)放到大结构体里呢?(相当于全局变量)

在任何地方(任意控件的回调函数中)写入:

handles.自定义变量名 = 数据值   % 给结构体添加成员变量

这样就定义了自己的变量。

在任何地方:

I = handles.自定义变量名   % 结构体名加点号来引用成员变量

就可以将变量值赋给一个变量,并进行运算处理,同样也可以修改这个自定义成员变量。

别忘了在函数末尾使用

guidata(hObject, handles); %不用改,直接复制粘贴

来保存对handles和hObject的操作(不然自定义的变量就没了,用于保存这个全局变量)

四、获取控件和用户自定义数据

只要获取GUI的handles就可以获取所有

例:在自己定义的函数里获取handles,只需将handles作为输入,参数传递进去即可

function my_function(handles)
% handles是GUI的handles
% 调用GUI内任意一控件的信息
% get(handles.控件A的tag,'要获取的属性名');
I = get(handles.my_popup,'Value');

五、保存用户数据到guidata

在其他子函数或非figure内控件的callback内保存用户数据到guidata

guidata(hObject,handles);
% 在figure控件callback之内调用guidata(hObject,handles),
% hObject是控件的句柄。
guidata(handles.figure1,handles);
% 如果在其他子函数或者非figure控件的callback中使用guidata保存数据,
% hObject就不再是控件句柄,会出错
% 所以我们要用figure的句柄代替hObject,即handles.figure1

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值