如何制作一个 GUI 按钮 open/close 另一个 GUI
How to make a GUI pushbutton open/close another GUI
我有一个名为 GUI_main
的 GUI,其中有一个名为 pushbutton_GUI_main
的按钮。我目前实现了以下回调函数:
function pushbutton_GUI_main_Callback(hObject, eventdata, handles)
GUI_sub
其中 GUI_sub
是您单击 pushbutton_GUI_main
时打开的另一个 GUI。但是,我想要如下内容:
function pushbutton_GUI_main_Callback(hObject, eventdata, handles)
if (GUI_sub == open)
close(GUI_sub)
else
GUI_sub
也就是说,用pushbutton_GUI_main
我希望能够打开和关闭GUI_sub
。
您需要一个对象句柄来引用子 GUI。假设 GUI_sub
是使用 GUIDE 构建的 GUI,它默认使用可选句柄输出进行编程。
GUIDE GUI 的简单实现看起来像这样:
function pushbutton1_Callback(hObject, eventdata, handles)
if ~isempty(handles.figure1.UserData)
close(handles.figure1.UserData);
handles.figure1.UserData = [];
else
handles.figure1.UserData = sub_GUI;
end
大多数(也许是全部?)MATLAB 的图形对象默认都有一个 UserData
字段。在这个简单的示例中,我使用了基础图形对象的 UserData
。另请参阅:Share Data Among Callbacks 了解 store/transfer 此数据的其他方法。
正如 excaza 所说,handles 是在 GUI 中传递数据或信息的好方法。
另一种方法,如果您出于某种原因不想存储 GUI 句柄,也许 GUI_sub 可以独立创建是搜索图形句柄。
subGuiH = findall(0,'Name','GUI_sub');
if ~isempty(subGuiH)
close(subGuiH);
end
GUI_sub;
可以通过添加
来缩小搜索范围
findall(0,'Type','figure','Name','GUI_sub')
根据您的 Matlab 版本,您还可以查看 groot
我有一个名为 GUI_main
的 GUI,其中有一个名为 pushbutton_GUI_main
的按钮。我目前实现了以下回调函数:
function pushbutton_GUI_main_Callback(hObject, eventdata, handles)
GUI_sub
其中 GUI_sub
是您单击 pushbutton_GUI_main
时打开的另一个 GUI。但是,我想要如下内容:
function pushbutton_GUI_main_Callback(hObject, eventdata, handles)
if (GUI_sub == open)
close(GUI_sub)
else
GUI_sub
也就是说,用pushbutton_GUI_main
我希望能够打开和关闭GUI_sub
。
您需要一个对象句柄来引用子 GUI。假设 GUI_sub
是使用 GUIDE 构建的 GUI,它默认使用可选句柄输出进行编程。
GUIDE GUI 的简单实现看起来像这样:
function pushbutton1_Callback(hObject, eventdata, handles)
if ~isempty(handles.figure1.UserData)
close(handles.figure1.UserData);
handles.figure1.UserData = [];
else
handles.figure1.UserData = sub_GUI;
end
大多数(也许是全部?)MATLAB 的图形对象默认都有一个 UserData
字段。在这个简单的示例中,我使用了基础图形对象的 UserData
。另请参阅:Share Data Among Callbacks 了解 store/transfer 此数据的其他方法。
正如 excaza 所说,handles 是在 GUI 中传递数据或信息的好方法。 另一种方法,如果您出于某种原因不想存储 GUI 句柄,也许 GUI_sub 可以独立创建是搜索图形句柄。
subGuiH = findall(0,'Name','GUI_sub');
if ~isempty(subGuiH)
close(subGuiH);
end
GUI_sub;
可以通过添加
来缩小搜索范围findall(0,'Type','figure','Name','GUI_sub')
根据您的 Matlab 版本,您还可以查看 groot