修改句柄结构后的 MATLAB GUI "forgets" 个对象

MATLAB GUI "forgets" objects after modifying handles structure

我的图形用户界面工具栏中有一个加载按钮。当我单击它时,它允许我从对话框中 select 一个文件。我打开一个 .mat 文件,其中有一个名为 sys.

的对象

一旦我 select 文件,回调应该 运行 以下代码:

handles.sys = sys;
%% A bunch of other stuff to populate values from sys into the gui text fields %%

对于此回调中的其余代码,我可以调用 handles.sys 并查看所有内容。但是,当我退出这个函数时,handles.sys 不再等于 sys。 gui 似乎有 "forgotten" 或破坏了 handles.sys 对象。

为什么会发生这种情况,正确的做法是什么?我是否需要使用构造函数重建我的整个 sys 对象然后调用 handles.sys = newsys?发生这种情况是因为 sys 对象仅存在于临时 openfile_Callback 函数的工作区中吗?

当您更新 struct(例如 handles)时,这些更改是针对本地副本的,因此其他函数看不到。您需要将 handles 存储回图的 guidata 中,以使更改持续存在。 guidata 的第一个输入应该是图形的句柄(我以 handles.fig 为例)。这样做之后,更新后的 handles 结构将自动传递给您的 GUI。

handles.sys = sys;

% "Save" the updated handles struct in the figure
guidata(handles.fig, handles)