guidata命令何时真正更新数据?

时间:2011-08-23 09:31:18

标签: user-interface matlab

现在我有两个GUI。一个名为Main,另一个名为Sub。

从Main调用Sub,在其中我想对Main的数据进行一些更新。

所以在Sub中,我使用

mainGUI = guidata(Main)
set(mainGUI.Button,'Enable','on') %% originally it is off
gudata(Main,mainGUI)

然后Sub关闭,我们回到Main。 但是,在您打开和关闭Sub两次之前,Main的句柄尚未更改。


该计划的想法是

首先你有一个Main只允许你点击一个按钮(打开Sub,一个文件选择界面),然后在你正确选择和导入Sub中的数据后,当你回到Main时它会自动激活相应的按钮(之前已关闭)。

欢迎任何评论。 提前谢谢。

1 个答案:

答案 0 :(得分:1)

我可能无法完全理解您的问题(请参阅我的评论),但我做了一个示例代码,可以按照您的预期进行操作。

我认为您缺少的部分是您需要将主要图形句柄传递给子gui才能使数据可以访问。据我所知,数据由guidata存储在图形环境中,因此您需要知道图形的句柄才能访问其存储的gui数据。

这是:

主GUI

% GUI
function so_multiguiA
% Layout
figure('units','normalized','position',[0.2 0.2 0.3 0.3],'tag','figure');
datamain=guihandles(gcf);
uicontrol('style','pushbutton','string','Click me', ... 
    'parent',datamain.figure,'units','normalized', ... 
    'Position',[0.2 0.2 0.6 0.6],'tag','button', ... 
    'callback',@buttonmain_callback);
datamain=guihandles(gcf); 
% Data
guidata(gcf,datamain);
end
% Callback
function buttonmain_callback(obj,event)%#ok
so_multiguiB(gcbf);
end

子GUI

% GUI
function so_multiguiB(mainhandle)
% Layout
figure('units','normalized','position',[0.5 0.5 0.3 0.3],'tag','figure');
datasub=guihandles(gcf);
uicontrol('style','pushbutton','string','Disable main button', ... 
    'parent',datasub.figure,'units','normalized', ... 
    'Position',[0.2 0.2 0.6 0.6],'tag','button', ... 
    'callback',@buttonsub_callback);
datasub=guihandles(gcf); 
% Data
datasub.mainhandle=mainhandle;
guidata(gcf,datasub);
end
% Callback
function buttonsub_callback(obj,event)%#ok
datasub=guidata(gcbf);
datamain=guidata(datasub.mainhandle);
set(datamain.button,'enable','off');
end

希望它有所帮助。