2016-08-12 77 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