在Matlab指南中保存GUI句柄
在《Matlab指南》中,是否有任何方法可以保存GUI.m文件中的所有GUI句柄,以便我可以在不同的函数中访问这些句柄(完全是不同的.m文件,而不是GUI.m文件中的其他回调) 请注意,我不想手动将这些句柄传递给其他函数。使用findall(图\u handle) 例如:在Matlab指南中保存GUI句柄,matlab,matlab-figure,data-transfer,matlab-guide,handles,Matlab,Matlab Figure,Data Transfer,Matlab Guide,Handles,在《Matlab指南》中,是否有任何方法可以保存GUI.m文件中的所有GUI句柄,以便我可以在不同的函数中访问这些句柄(完全是不同的.m文件,而不是GUI.m文件中的其他回调) 请注意,我不想手动将这些句柄传递给其他函数。使用findall(图\u handle) 例如: F=figure; H=uicontrol('parent',F,'style','pushbutton'); uihandles=findall(F,'type','uicontrol'); 如果没有直接的图形句柄,可以使
F=figure;
H=uicontrol('parent',F,'style','pushbutton');
uihandles=findall(F,'type','uicontrol');
如果没有直接的图形句柄,可以使用
uihandles=findall(gcf,'type','uicontrol');
由于您正在使用指南设计GUI,您在当前图形上放置的任何
uicontrol
对象(例如GUI.fig
)将自动将其句柄添加到句柄
结构中,即在回调之间传递的变量handles
传统上也用于在回调之间传递任何其他程序变量,方法是将这些变量添加到handles
结构中,并使用guidata()
函数保存handles
将句柄
传递给外部函数最简单、最快速的方法是将其作为输入参数发送给这些函数。例如,如果您的另一个外部文件名为auxiliary.m
,并且包含一个名为auxiliary(…)
的函数,则只需设计auxiliary(…)
即可接受一个名为handles
的额外参数,以接收所有图形句柄以及任何其他手动添加的变量。这正是您的GUI.m
目前的工作方式。请注意,GUI.m
看起来像一个单独的文件,但实际上它是许多回调函数的容器,其中每个回调函数都可以是一个单独的.m
文件,其中包含一个同名函数。例如,如果要从GUI.m
中剪切pushbutton1\u回调(hObject、eventdata、handles)
并将其粘贴到一个单独的pushbutton1\u回调.m
文件中,则只要没有同名的重复文件,程序的工作方式就完全相同
如果仍然坚持不将句柄直接传递给外部函数,只需保存句柄
结构并将其加载到第二个.m
文件中:
% inside GUI.m
save('handles.mat', 'handles');
%inside auxiliary.m
load('handles.mat', 'handles');
我推荐第一种方法,因为它没有IO开销,而且不需要数据持久性。谢谢!但这意味着我还得通过考试,不是吗?我也不想那样做。这可能吗?@Hugh的意思是,如果您提前知道数字句柄(或者如果您希望数字是活动数字,即,
gcf
)然后从您的第二个.m
文件中,您可以使用findall
从该图形中动态检索所有uicontrol
句柄。他的代码是您需要添加到外部函数中的代码,而不是GUI.m。您还可以通过在生成函数-set中设置标记(fig_handle,'tag','MyUniqueTag')来查找图形句柄使用fig_handle=findall(0,'Tag','MyUniqueTag'):谢谢!!!正是我需要的。我不想传递句柄有一个特定的原因,这是因为需要句柄的函数首先被深埋在另一组函数中。我不想将句柄传递给这么多函数,只想提供一些关于另一种方法的信息:在本例中,一组有用的函数是“assignin”和“evalin”。在任何函数内部使用:“assignin('base','temphandles',handles);”将该函数中的“handles”分配到基本工作区中的“temphandles”。相反,使用“handles=evalin('base','temphandles');”将把基本工作区中的“temphandles”指定给当前函数中的“handles”。