在matlab中从一个gui到另一个gui的结果获取
我有两个在matlab中从一个gui到另一个gui的结果获取,matlab,user-interface,Matlab,User Interface,我有两个GUI,一个是main,另一个是subGUI。我希望主gui的结果显示在子gui的文本框中 我通过添加以下内容将主gui连接到子gui: openfig subgui.fig 我知道这不行,我是matlab新手。要在主gui中显示结果,我有: set(handles.edit1,'String',f); f表示我希望在另一个gui中显示的结果。梦想-代码行 openfig subgui.fig 将只打开GUI/图,而不是以可以使用的方式启动GUI。当打开它时,将显示GUI及其所有控
GUI
,一个是main,另一个是subGUI
。我希望主gui的结果显示在子gui
的文本框中
我通过添加以下内容将主gui连接到子gui:
openfig subgui.fig
我知道这不行,我是matlab新手。要在主gui中显示结果,我有:
set(handles.edit1,'String',f);
f
表示我希望在另一个gui中显示的结果。梦想-代码行
openfig subgui.fig
将只打开GUI/图,而不是以可以使用的方式启动GUI。当打开它时,将显示GUI及其所有控件,一旦您尝试使用它,就会出现错误(导致尝试引用非结构数组的字段。
)。相反,按名称启动GUI,如下所示
subgui
这将足以以工作方式启动子gui
现在,为了将信息从一个GUI传递到另一个GUI,您可以尝试以下方法。假设您正在使用GUIDE创建主GUI和子GUI(这似乎有效,因为您有GUI图形),请打开每个GUI图形的属性检查器,并将handleviability
属性设置为on
。同时,为每个GUI分配标记
,可能为主GUI分配MainGui
,为子GUI分配SubGui
现在,您可以使用findobj
函数使用其标记查找其他GUI。然后,假设我们从第一个GUI的按钮回调启动子GUI,如
function pushbutton1_Callback(hObject, eventdata, handles)
% launch the sub GUI
% NOTE - you may want code here to check to see if the GUI is already open before
% launching it again
subgui;
% find the handle to the subgui
hSubGui = findobj('Tag','SubGui');
if ~isempty(hSubGui)
% get the handles structure of the sub GUI
hSubGuiHandles = guidata(hSubGui);
% get the data from the main GUI to pass to the sub GUI
value = get(handles.edit1,'String');
% now update an equivalent edit text field in the other GUI
set(hSubGuiHandles.edit1,'String',value);
end
在上面,我们使用
findobj
查找我们感兴趣的GUI,使用它的标记
属性。如果我们发现这个GUI(因此,hSubGui
是非空的),那么我们就可以得到它的句柄结构,这样我们就可以用主GUI中的数据更新它的编辑文本字段。幻想-代码行
openfig subgui.fig
将只打开GUI/图,而不是以可以使用的方式启动GUI。当打开它时,将显示GUI及其所有控件,一旦您尝试使用它,就会出现错误(导致尝试引用非结构数组的字段。
)。相反,按名称启动GUI,如下所示
subgui
这将足以以工作方式启动子gui
现在,为了将信息从一个GUI传递到另一个GUI,您可以尝试以下方法。假设您正在使用GUIDE创建主GUI和子GUI(这似乎有效,因为您有GUI图形),请打开每个GUI图形的属性检查器,并将handleviability
属性设置为on
。同时,为每个GUI分配标记
,可能为主GUI分配MainGui
,为子GUI分配SubGui
现在,您可以使用findobj
函数使用其标记查找其他GUI。然后,假设我们从第一个GUI的按钮回调启动子GUI,如
function pushbutton1_Callback(hObject, eventdata, handles)
% launch the sub GUI
% NOTE - you may want code here to check to see if the GUI is already open before
% launching it again
subgui;
% find the handle to the subgui
hSubGui = findobj('Tag','SubGui');
if ~isempty(hSubGui)
% get the handles structure of the sub GUI
hSubGuiHandles = guidata(hSubGui);
% get the data from the main GUI to pass to the sub GUI
value = get(handles.edit1,'String');
% now update an equivalent edit text field in the other GUI
set(hSubGuiHandles.edit1,'String',value);
end
在上面,我们使用
findobj
查找我们感兴趣的GUI,使用它的标记
属性。如果我们发现这个GUI(因此hSubGui
是非空的),那么我们将得到它的句柄结构,这样我们就可以用主GUI中的数据更新它的编辑文本字段。您需要一个全局变量
假设我们有
- 一个名为main.m的主GUI(带有一个相关的main.fig),带有一个编辑框(main_edit)和一个按钮
- 一个名为sub.m的子GUI(带有一个关联的sub.fig)和一个editbox(sub_edit),该editbox将从main中的editbox获取值
global my_data;
my_data.main.main_edit = get(hObject, ‘String’);
global my_data;
set(handles.sub_edit, ‘String’, my_data.main.main_edit);
第二步。在按钮的回调中,在返回之前添加以下内容:
global my_data;
sub;
delete(handles.main_figure);
在sub.m中,在打开功能中添加以下内容:
global my_data;
my_data.main.main_edit = get(hObject, ‘String’);
global my_data;
set(handles.sub_edit, ‘String’, my_data.main.main_edit);
让我知道它是否适合你
另外,您可以查看MathWorks工程师发布的一些很棒的视频,这里有一个视频可以帮助您:您需要一个全局变量 假设我们有
- 一个名为main.m的主GUI(带有一个相关的main.fig),带有一个编辑框(main_edit)和一个按钮
- 一个名为sub.m的子GUI(带有一个关联的sub.fig)和一个editbox(sub_edit),该editbox将从main中的editbox获取值
global my_data;
my_data.main.main_edit = get(hObject, ‘String’);
global my_data;
set(handles.sub_edit, ‘String’, my_data.main.main_edit);
第二步。在按钮的回调中,在返回之前添加以下内容:
global my_data;
sub;
delete(handles.main_figure);
在sub.m中,在打开功能中添加以下内容:
global my_data;
my_data.main.main_edit = get(hObject, ‘String’);
global my_data;
set(handles.sub_edit, ‘String’, my_data.main.main_edit);
让我知道它是否适合你
此外,您可以查看MathWorks工程师发布的一些很棒的视频,这里有一个视频可以帮助您:我没有按钮,是否可以从主gui调用输出,并将其显示到子gui,或者我应该创建一个按钮以将我指向子gui?按钮(在上面的代码中)这只是一个例子。但是,是否启动子GUI取决于您自己。(虽然我不明白你所说的从主gui调用输出是什么意思。)你打算如何调用子gui?我没有按钮,如果我可以从主gui调用输出并将其显示到子gui,或者我应该创建一个按钮来引导我到子gui?按钮(在上面的代码中)这只是一个例子。但是,是否启动子GUI取决于您自己。(虽然我不明白你所说的从主gui调用输出是什么意思。)你打算如何调用子gui?我没有按钮,如果我可以从主gui调用输出并将其显示到子gui,是否可以,或者我应该创建一个按钮来指示我