MATLAB Answers

How to modify the handles structure (GUI) from an external function

27 views (last 30 days)
MRR
MRR on 8 Mar 2013
Answered: zakaria on 5 Jun 2014
Hi,
I am developing a GUI. I can modify the handles structure (for example handles.variable1 = 2) within callbacks. However I am not able to do the same within an external function. E.g., this does not work:
function [matrix, indexVector] = myFunction(handles)
handles.variable1 = 1;
It is important to note that myFunction does not belong to the GUI callbacks, it is simply a function I have created in another m file. When I call it I can read the handles struture (actually im passing them as a parameter) but when I try to modify them the modification is not recorded.
Best,
-MRR

Accepted Answer

Sean de Wolski
Sean de Wolski on 8 Mar 2013
Edited: Sean de Wolski on 8 Mar 2013
function [matrix, indexVector] = myFunction(handles)
handles.variable1 = 1;
guidata(handles.figure1,handles)
Where figure1 is the 'Tag' of the figure. You want to make sure that you assign the handles structure to the right place (i.e. the figure). hObject is dynamic, handles will always have the field for the figure.
  10 Comments
MRR
MRR on 20 Mar 2013
@Jan Simon: Thank you, now it works. The key instruction that makes the handles structure to be updated is (and as you can see it wasnt used in any other previous solution in this post):
handles = guidata(hObject); % Get the version updated in myFunction!
But bear in mind that the other solutions (mine included) did not work, i.e., using guidata(hObject, handles) does not update the handles structure modified by myFunction, however it works for any callback function defined in the gui (i.e, those functions that are automatically associated with the pushbuttons, etc..), so Azzi's and Sean's answers, although hit the point, do not work. Of course, their and your feedback is very appreciated.
All in all, I would say the way GUIDE manages the handles structure is confusing.
Hope this discussion will help another "gui developers"
Best and thank you!
-MRR

Sign in to comment.

More Answers (3)

Azzi Abdelmalek
Azzi Abdelmalek on 8 Mar 2013
Use
function [matrix, indexVector] = myFunction(hObject,handles)
handles.variable1 = 1;
guidata(hObject,handles)
  4 Comments

Sign in to comment.



zakaria
zakaria on 5 Jun 2014
handles = guihandles(gcbo); % if not presents in the other external function

Community Treasure Hunt

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

Start Hunting!