GUIDATA save handles only after exiting callback

1 回表示 (過去 30 日間)
David Nguyen
David Nguyen 2014 年 3 月 20 日
回答済み: David Nguyen 2014 年 3 月 20 日
Dear All,
I am currently working on a GUI using Matlab GUIDE.
I work with the handles to store some data to be available for all callbacks.
But here comes my problem.
When I introduce additionnal functions into the different callbacks and if those functions try to add specific data to the handles, I have a feeling that the handles is saved only after the callback terminates.
Here is my concrete example:
% Button Callback
function button1_Callback(hObject, eventdata, handles)
% Call specific function
myFunction(handles);
% Use specific data
myOperation = handles.myData + 1;
% Specific function
function myFunction(handles)
% Store data in handles
handles.myData = 1;
% Save handles
guidata(gcbo, handles);
If I proceed this way, I obtain the following error:
Reference to non-existent field 'myData'.
I partially solved the problem by waiting the callback to be closed. And then myData is indeed available for further processing.
My question is therefore the following:
Am I doing the data storage and save right? Is there a way to make myData available already inside the callback (as it is done in my example)?
I hope I was clear in the definition of my problem, in any case I can provide further information upon request.
Thank you very much for your help and have a nice day.
David N.

採用された回答

David Nguyen
David Nguyen 2014 年 3 月 20 日
Here is a possible solution:
% Button Callback
function button1_Callback(hObject, eventdata, handles)
% Call specific function
handles = myFunction(handles);
% Use specific data
myOperation = handles.myData + 1;
% Specific function
function [newHandles] = myFunction(handles)
% Store data in handles
handles.myData = 1;
% Save handles
newHandles = handles;
Maybe gcbf could give also some results. I let you try^^

その他の回答 (3 件)

nl2605
nl2605 2014 年 3 月 20 日
編集済み: nl2605 2014 年 3 月 20 日
You are doing it alright. The problem is when you store your handles structure. You use gcbo. So it stores only for that callback. Instead store it in hObject or whatever your handles structure is. In your myFunction write guidata(hObject,handles) rather than using gcbo.
  1 件のコメント
nl2605
nl2605 2014 年 3 月 20 日
http://www.mathworks.de/de/help/matlab/ref/guidata.html You can refer to this link in case of any confusion.

サインインしてコメントする。


David Nguyen
David Nguyen 2014 年 3 月 20 日
Dear nl2605,
I changed my code to:
% Button Callback
function button1_Callback(hObject, eventdata, handles)
% Call specific function
myFunction(hObject, handles);
% Use specific data
myOperation = handles.myData + 1;
% Specific function
function myFunction(hObject, handles)
% Store data in handles
handles.myData = 1;
% Save handles
guidata(hObject, handles);
But the problem remains the same. Maybe I misunderstand something.
Thanks for your answer and take care.
David N.
  1 件のコメント
nl2605
nl2605 2014 年 3 月 20 日
Its still giving the same error? That's strange. Its working fine for me.

サインインしてコメントする。


David Nguyen
David Nguyen 2014 年 3 月 20 日
Dear nl2605,
I am really surprised that you get the code running.
I checked twice and I still have the same error:
Reference to non-existent field 'myData'.
Unless I wait for the callback to finish.
Do you have any idea where it might comes from?
Thanks and regards.
David N.
  2 件のコメント
nl2605
nl2605 2014 年 3 月 20 日
Hmmm...I did something that produces the result. But I am not quite sure if that's the right way to do it. Make handles(the structure) as the output argument of your function 'myFunction'. And then when you call this function, call it like this: handles = myFunction(hObject,handles).
David Nguyen
David Nguyen 2014 年 3 月 20 日
This is what I did also to solve the problem. I also feel that it is not optimal but... at least it works^^
Many thanks again nl2605. I will write a formal solution for other readers.
Cya
David N.

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeCall Web Services from MATLAB Using HTTP についてさらに検索

製品

Community Treasure Hunt

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

Start Hunting!

Translated by