MatlabGUI:我需要传递hObject和句柄吗?

MatlabGUI:我需要传递hObject和句柄吗?,matlab,handle,matlab-guide,Matlab,Handle,Matlab Guide,我对在Matlab中编写gui相当陌生,并注意到在回调之间传递信息时,通常会传递两个值hObject和handles 据我阅读和理解,hObject是包含真实数据的对象的句柄(或至少是句柄),而handles本身不是句柄,而是一个在hObject后面重现对象结构的结构。更改(或添加到)句柄不会更改从调用函数中看到的真实数据,而是更改本地副本。要将更改后的数据写入hObject所指向的对象,我需要调用guidata(hObject,handles) 到目前为止这是对的还是我做错了什么 我还了解到,

我对在Matlab中编写gui相当陌生,并注意到在回调之间传递信息时,通常会传递两个值
hObject
handles

据我阅读和理解,
hObject
是包含真实数据的对象的句柄(或至少是句柄),而
handles
本身不是句柄,而是一个在
hObject
后面重现对象结构的结构。更改(或添加到)
句柄
不会更改从调用函数中看到的真实数据,而是更改本地副本。要将更改后的数据写入
hObject
所指向的对象,我需要调用
guidata(hObject,handles)

到目前为止这是对的还是我做错了什么

我还了解到,通过调用
handles=guidata(hObject)
,我可以创建类似于
handles
的结构


那么,将
hObject
handles
传递给我自己的一个函数,而不是仅仅传递
hObject
并在本地创建
句柄,有什么意义吗?

到目前为止,你是正确的。输入参数
handles
是跟踪UI所有组件的便捷方法。作为标准,
句柄
不是输入参数。但是如果您使用
guide
,它将设置为一个额外参数,如下所示,例如,通过设置匿名函数
@(hObject,eventdata)guitest('pushbutton1_Callback',hObject,eventdata,guidata(hObject))的
Callback
选项。 当然,这可以通过
handles=guidata(hObject)
在函数的代码中轻松实现

通常您不需要更改
句柄
(仅在它们引用的对象中),但是如果您需要更改
句柄
中的某些内容(例如,如果您使用它存储的不仅仅是UI元素的
句柄
),则调用
guidata(hObject,handles)非常重要
以实际保存更改

因此,对您的问题的简短回答是:不,您也可以在需要时自己检索
句柄