Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Matlab指南中保存GUI句柄_Matlab_Matlab Figure_Data Transfer_Matlab Guide_Handles - Fatal编程技术网

在Matlab指南中保存GUI句柄

在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'); 如果没有直接的图形句柄,可以使

在《Matlab指南》中,是否有任何方法可以保存GUI.m文件中的所有GUI句柄,以便我可以在不同的函数中访问这些句柄(完全是不同的.m文件,而不是GUI.m文件中的其他回调)

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

使用findall(图\u handle)

例如:

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”。