主GUI和子GUI之间的关系

时间:2012-04-07 20:37:46

标签: matlab user-interface

我有两个名为masir和SetOut的GUI SetOut GUI是masir的子GUI(按下masir上的按钮将打开SetOut) 要在SetOut中访问masir的数据,我有以下两行代码:

masirGUIhandle = masir;  
masirGUIdata = guidata(masirGUIhandle);  

但运行这两行将运行masir的打开功能,因为我在SetOut中工作(在打开函数中我为我的变量设置了一些初始值,现在我不想要那些初始值,我需要更改我的值变量)所以我不想运行masir GUI的OpeningFcn,我只需要访问SetOut中的masir数据 我该怎么做才能解决问题?

任何人都可以帮我解决这个问题并向我解释一下吗?

I use this easy way for data sharing between GUIs
%In the end of OpeningFcn of Main GUI
setappdata(0,'HandleMainGUI',hObject);
%When you want to edit shared data you must get the handle
HandleMainGUI=getappdata(0,'HandleMainGUI');
%write a local variable called MyData to SharedData, any type of data
setappdata(HandleMainGUI,'SharedData',MyData); 
%get SharedData and save it to a local variable called SomeDataShared
SomeDataShared=getappdata(HandleMainGUI,'SharedData'); 
Don't forget to clean up the data shared in the CloseReqFcn of you main GUI
HandleMainGUI=getappdata(0,'HandleMainGUI');
rmappdata(HandleMainGUI,'MySharedData') %do rmappdata for all data shared 
Remember that your GUIs might try to getappdata that doesn't exist, you should    first     test if it does exist
if (isappdata(0,'HandleMainGUI') & isappdata(HandleMainGUI,'MySharedData'))
%get, set or rm appdata
else
%do something else, maybe loading default values into those variables
end  

请告诉我更多关于应该在MainGUI中写入哪一行代码以及应该在SubGUI中写入哪一行?
并告诉我,CloseReqFcn的响应者是什么意思?

1 个答案:

答案 0 :(得分:2)

让我总结一下我是如何看待这个问题的。

您想要从SetOut读取数据而不创建它吗?这是不可能的,因为在创建窗口时将创建数据。

一个好的和系统的方法是面向对象(参见Model-View Controller Pattern)你可以或多或少地从我的回答中复制一个例子here(事件的例子 - 观察者)


但是如果你想坚持你的代码,我也有一些想法:

  • 如果您不希望窗口显示,可以使用set(theGUIhandle,'Visible','off')

  • 将其设置为隐藏
  • 窗口未关闭时,您可以使用getappdata(theGUIhandle)

  • 获取数据
  • 如果您希望之后的数据关闭窗口,您需要有一个将其存储在窗口外的功能。