Why guidata doesn't save modified handles structure in OpeningFcn of GUI?

1 view (last 30 days)
Hi everyone,
I'm implementing a GUI-based simulation program comprising one Main GUI and several "Sub" GUIs. The Sub GUIs are opened from within the callbacks of the Main GUI in the following manner:
% open SingleModesFig in MainFig
singleModesFig = SingleModesFig;
handlesSingleModesFig = guihandles(singleModesFig);
guidata(singleModesFig,handlesSingleModesFig);
In this example, SingleModesFig is the name of a Sub GUI. In the OpeningFcn of SingleModesFig I modify the handles structure by appending some fields and try to save it back using guidata():
% opening function of SingleModesFig
function SingleModesFig_OpeningFcn(hObject, eventdata, handles, varargin)
handles.output = hObject;
handles.treshold = 50;
handles.N = 1; % and so on ...
% save back handles struct
guidata(hObject,handles);
However, when entering any callback in the Sub GUI all the added fields (output, threshold, N,...) have disappeared:
% example callback in SingleModesFig
function ExampleButton_Callback(hObject, eventdata, handles)
% do something with handles struct
a = handles.treshold; % PRODUCES ERROR: no such field 'treshold' in handles
Interestingly, when I open the SingleModesFig not from code but manually by pressing "Run", guidata() works fine and the handles structure is saved back correctly. I tried to figure out the reason for this, but haven't found any sensible explanation. Does it create confusion for guidata if multiple figures are opened simultaneously? I tried to replace 'hObject' by an explicit search for the figure using its tag, but this doesn't solved the problem as well. In addition, I would rather like to understand this behavior and fix it than to incorporate workarounds using the base workspace.
I appreciate your hints and help.

Accepted Answer

Matt Sprague
Matt Sprague on 11 Jan 2018
Remove the following lines from the MainFig pushbutton callback:
handlesSingleModesFig = guihandles(singleModesFig);
guidata(singleModesFig,handlesSingleModesFig);
You are overwriting the changes made in the OpeningFcn of the SingleModesFig by creating a new handles structure. There is no need to create a handles structure for SingleModesFig from the MainFig, GUIDE will create the handles structure automatically when opening up the new GUI

More Answers (0)

Categories

Find more on Migrate GUIDE Apps in Help Center and File Exchange

Tags

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!