所以,我想出了如何从另一个调用一个gui并通过varargin和varargout来回发送信息。但是,现在我处于一种情况,我有两个独立的guis(一个不是从另一个调用),我相信如果我想在它们之间进行通信,我还需要一些其他的方法。
更确切地说,我正在制作两个与Simulink交互的GUI。打开模型时会打开一个GUI并跟踪信息。双击块时,将打开另一个GUI。我想将此GUI中的信息发送到信息跟踪GUI。
因此,根据我搜索过的内容,我可以通过在信息跟踪GUI中使用Listener来完成此操作;或者我可以使用setappdata/getappdata或findall(0, ...)直接修改信息跟踪GUI中的变量。
到目前为止,我的尝试还没有奏效,我想知道我是否采取了写作方法。有人能指出我的方向吗?如果我能提供更多信息,请告诉我们!
答案 0 :(得分:0)
我一直使用setappdata / getappdata方法来处理这类事情。以下是您所做工作的一般细分。创建数字时,请为它们添加如下标记:
figure( ..., 'Tag', 'info_gui', ... ); % tag name is up to you
figure( ..., 'Tag', 'other_gui', ... ); % tag name is up to you
任何时候你需要一个或另一个数字的句柄只需要像这样调用findobj
info_gui_handle = findobj('tag','info_gui');
other_gui_handle = findobj('tag','other_gui');
好的,现在让我们将一些示例数据存储在我们稍后将更新的info_gui中
info_gui_data.x = 1;
info_gui_data.y = 1;
setappdata( info_gui_handle, 'info_gui_data', info_gui_data);
设置好数据后,您可以执行以下操作:
% First you get a handle to the info gui figure
info_gui_handle = findobj('tag','info_gui');
% Next you get the appdata thats stored in this figure. In this example
% I have previously stored a struct variable called
% 'info_gui_data' inside the appdata of the info_gui
info_gui_data = getappdata(info_gui_handle ,'info_gui_data');
% Make your changes whatever they are. Here I am modifying variables x
% and y that are stored in the struct info_gui_data
info_gui_data.x = 2;
info_gui_data.y = 2;
% Now that I've made changes to the local variable info_gui_data I can
% now store it back into the info gui's appdata.
setappdata(info_gui_handle ,'info_gui_data',info_gui_data);
我喜欢把我的所有数字appdata存储在一个巨大的结构中。似乎更容易跟踪,但它取决于你。希望这会有所帮助:)
答案 1 :(得分:0)
您也可以尝试使用guidata和guihandles。
假设GUI1的句柄是H1。在GUI1中,如果要存储以后可以检索的数据,请使用:
guidata(H1,data)
在GUI2中,当您需要数据时,请使用:
data = guidata(H1);
或者,您可以将数据存储在uicontrol对象的“用户数据”属性中。确保将属性“标记”设置为有效的内容(例如“mybutton”)。要从GUI2访问它,请使用:
handles = guihandles(H1);
data = get(handles.mybutton,'UserData');