在Matlab GUIDE中保存GUI句柄

时间:2013-06-17 12:40:58

标签: matlab matlab-figure data-transfer matlab-guide handles

在Matlab GUIDE中,有什么方法可以保存GUI.m文件中的所有GUIhandle,这样我就可以在不同的函数中访问这些句柄(一个不同的.m文件,而不是其他一个回调函数)在GUI.m文件中)?

请注意,我不想手动将这些句柄传递给其他函数。

2 个答案:

答案 0 :(得分:1)

使用findall(figure_handle);

示例:

F=figure;
H=uicontrol('parent',F,'style','pushbutton');
uihandles=findall(F,'type','uicontrol');

如果您没有直接使用数字句柄,可以使用

uihandles=findall(gcf,'type','uicontrol');

答案 1 :(得分:1)

由于您使用GUIDE设计GUI,因此您在当前图形上放置的任何uicontrol对象(例如GUI.fig)都会自动将其句柄添加到handles结构中,将在回调之间传递的变量。 handles传统上也用于通过将这些变量添加到handles结构并使用handles函数保存guidata()来在回调之间传递任何其他程序变量。

handles传递给外部函数的最简单快捷的方法是将其作为输入参数发送给这些函数。例如,如果您的其他外部文件名为auxiliary.m且包含名为auxiliary(...)的函数,则只需设计auxiliary(...)即可接受一个名为handles的额外参数来接收所有图形句柄 - - 加上任何其他手动添加的变量。这正是您GUI.m现在的工作方式。请注意,GUI.m看起来像一个文件,但它实际上是许多回调函数的容器,其中每个函数都可以是一个单独的.m文件,其中包含一个同名的单个函数。例如,如果您要从pushbutton1_Callback(hObject, eventdata, handles)中删除GUI.m并将其粘贴到单独的pushbutton1_Callback.m文件中,只要没有重复的文件,您的程序就会以完全相同的方式工作。同名。

如果仍然坚持不将句柄直接传递给外部函数,只需保存handles结构并将其加载到第二个.m文件中:

% inside GUI.m
save('handles.mat', 'handles');

%inside auxiliary.m
load('handles.mat', 'handles');

我推荐第一种方法,因为没有IO开销,你不需要数据持久性。