如何制作一个 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