修改句柄结构后的 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)
我的图形用户界面工具栏中有一个加载按钮。当我单击它时,它允许我从对话框中 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)