0

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

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

4

2 回答 2

1

使用 findall(figure_handle);

例子:

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

如果您没有直接的图形手柄,您可以使用

uihandles=findall(gcf,'type','uicontrol');
于 2013-06-17T12:50:14.097 回答
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 开销,也不需要数据持久性。

于 2013-06-17T13:23:41.557 回答