2016-08-12 42 views
0

我在我的GUI工具栏中有一个加载按钮。当我点击它时,它允许我从对话框中选择一个文件。我打开一个名为sys的包含对象的.mat文件。MATLAB GUI在修改句柄结构后“忘记”对象

一旦我选择文件,回调应该运行下面的代码:

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

为代码在这个回调其余的我可以打电话handles.sys,看到一切都在那里。但是,当我退出此函数时,handles.sys不再等于sys。似乎gui已经“忘记”或者破坏了handle.sys对象。

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

回答

3

当您更新struct(如handles)时,这些更改将保存在本地副本中,因此其他功能不会看到这些更改。您需要将handles存储在图的guidata之内以便保持更改。 guidata的第一个输入应该是该图的句柄(我已经使用handles.fig作为示例)。这样做后,更新的handles结构将自动传递到您的GUI。

handles.sys = sys; 

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

我不得不使用'guidata(handles.figure1,handles);'因为这是matlab默认创建的。 – toshiomagic

+0

@toshiomagic对。正如我所说的,我只是以'handles.fig'为例。每个人都会有所不同。 – Suever