MAATLAB GUI——回调函数的设置(Callbacks)

目录

1.回调函数创建步骤

1)命令窗口中输入guide,创建一个新的GUI界面窗口

2)从左侧的组件栏选择需要的组件进行布局

3)选中一个组件,双击进行组件的属性设置(Tag、String)

4)设置好属性后,对需要执行回调函数的组件进行回调函数的设置,右键单击组件,进入回调函数编辑

问题提出?

2.常见疑问解答hObject, eventdata, handles等

1)回调函数中的hObject, eventdata, handles是什么意思?

2)组件之间是通过什么进行联系(handles),又是通过什么进行区别的(Tag)?

3)怎么调用其他组件中的数据?

4)怎么对组件设置指定的文本?

5)组件之间的数据是怎么进行共享的?

3.相关链接供参考


1.回调函数创建步骤

       这里以一个四则运算为例进行说明,实现的功能是,在输入数据后,按下相应的按钮,会进行计算并且将结果呈现在相应的组件上

1)命令窗口中输入guide,创建一个新的GUI界面窗口

2)从左侧的组件栏选择需要的组件进行布局

3)选中一个组件,双击进行组件的属性设置(Tag、String)

4)设置好属性后,对需要执行回调函数的组件进行回调函数的设置,右键单击组件,进入回调函数编辑

% --- Executes on button press in pushbutton1.
function pushbutton1_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
set(handles.text6,'String',"+");
str1 = get(handles.edit1,'String'); % 获得文本框的文本内容,此时为字符串类型
num1 = str2double(str1);% 将获得的字符串转换成数字类型
str2 = get(handles.edit2,'String'); % 获得文本框的文本内容,此时为字符串类型
num2 = str2double(str2);% 将获得的字符串转换成数字类型
res = num1 + num2;
set(handles.edit3,'String',res);

问题提出?

是不是看到这里会很多疑问,比如:

1)回调函数中的hObject, eventdata, handles是什么意思?

2)组件之间是通过什么进行联系,又是通过什么进行区别的?

3)怎么调用其他组件中的数据?

4)组件之间的数据是怎么进行共享的?

5)怎么对组件设置指定的文本?

当时我也有疑问,在一个帖子上看到了相关的回答,自己做了一些补充,大家可以看一下

 

2.常见疑问解答hObject, eventdata, handles等

1)回调函数中的hObject, eventdata, handles是什么意思?

答:

参考链接:https://blog.csdn.net/smf0504/article/details/51832374?_t_t_t=0.11396357929334044

***hObject是当前回调函数对应的GUI对象的句柄;
***eventdata为未定义的保留参数,即当前控件的相关变量;
***handles是当前GUI所有数据的结构体,包含所有GUI对象的句柄和用户定义的数据;
***varargin在初始化时是空的,在触发控件时,变成一个1X4的单元数组;
第一个varargin{1}表示触发控件后所要执行的回调函数的函数名。
如果想把一个局部变量变成全局变量,一个有效的方法是将变量存在handles中,获取handles结构体某个变量值的方法是x=handles.a。

2)组件之间是通过什么进行联系(handles),又是通过什么进行区别的(Tag)?

答:

联系——在同一个GUI内的所有数据都有一个共同的结构体,即handles,这个结构体在创建了gui保存后会自动进行创建,含有所有组件对象的句柄以及相应的数据,而组件也是通过这个联系在一起的,使得所有在同一个gui的组件具有共同的结构体,不会和其他的gui的组件混淆在一起;

区别——在同一个handles下的每一个组件都有自己的属性,而在属性中有一个属性是标签名Tag,这是每一个组件独一无二的名字,因此组件之间是通过标签来进行区分彼此的;

作用——handles.标签名,可以用于对指定标签的属性进行设置。

3)怎么调用其他组件中的数据?

答:

通过以下代码进行组件文本的提取,提取到的是一个字符串类型

get(handles.组件的标签名,"要设置的组件的属性")

示例:
str1 = get(handles.edit1,'String')%返回字符串类型

如果文本是数字组成的字符串,要想获得数据类型,则需要使用到str2double()函数

num1 = str2double(str1)%得到一个双精度浮点数

4)怎么对组件设置指定的文本?

答:

通过以下代码进行组件文本的设置

set(handles.组件的标签名,"要设置的组件的属性名","要设置的内容")

示例:
set(handles.text6,'String',"+")

5)组件之间的数据是怎么进行共享的?

答:

同一个gui中组件的属性和数据都会保存在handles结构体中,在回调函数下,对相应组件的文本进行提取,即可对其进行操作,

如本例中,按下加号按钮,对两个数进行加法计算,加法计算前,得先获取编辑文本中的文本内容,在按下按钮后进行加法操作

3.相关链接供参考

https://blog.csdn.net/smf0504/article/details/51832374?_t_t_t=0.11396357929334044

https://jingyan.baidu.com/article/363872ec0c7ae96e4ba16f00.html

https://blog.csdn.net/persistlzy/article/details/53309467

https://wenku.baidu.com/view/5fefde1076eeaeaad1f330d0.html

展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 精致技术 设计师: CSDN官方博客
应支付0元
点击重新获取
扫码支付

支付成功即可阅读