matlab-app-designer - 如何在应用程序(mlapp)上实现模态弹出窗口?
问题描述
我想创建一个模态弹出窗口,其中包含许多 uiedit、uimenu 和 uipushbutton 控件。此模式弹出窗口应出现在 MATLAB 应用程序的顶部(使用应用程序设计器构建;而不是使用 GUIDE)。当模式弹出窗口处于活动状态时,父应用程序 UIFigure 应该是灰色的,类似于打开uiconfirm对话框时发生的情况。是否有未记录的方式或其他解决方法来实现这种类型的 UI 元素?
这个想法是,用户单击主应用程序上的“设置”按钮,弹出模式对话框,同时停用主应用程序控件,以允许调整设置。
解决方案
查看uiwait的文档,它准确地解释了如何达到您想要的效果。
为了遵循提供有意义答案的最佳实践,我可能会按如下方式处理这个问题。
为“设置”按钮创建回调:
- 通过将其属性设置为“变灰”所需的主应用程序的 UI 元素
Enable
'off'
- 实例化您为设置 UI 创建的 *.mlapp
从这里开始,有很多可能性。一种方法是uiwait
设置 mlapp 的UIFigure,因为默认情况下,它包含在 mlapp 定义的公共属性中。如果您想等到设置 UI 关闭,您可以简单地使用uiwait(settingsApp.UIFigure);
. 关闭设置 UI 后,您可以重新启用所有主要应用程序组件以取消“灰色”它们。
例如,您的“设置按钮”回调可能如下所示:
function onRequestSettings(app, event)
% set main figure's UI elements gray
% Assuming you want all elements gray
set(app.UIFigure.Children, 'Enable', 'off');
% create the settings UI by instantiating it here
settingsApp = settingsUI();
% wait until the figure closes
uiwait(settingsApp.UIFigure);
% ... SEE NOTE BELOW CODE BLOCK! ... %
% Now that the settings UI is closed,
% set main figure's UI elements back to normal.
% Again, assuming all elements here
set(app.UIFigure.Children, 'Enable', 'on');
end
笔记:
虽然上面的代码块会产生你想要的行为,但我没有展示如何在设置应用程序和主应用程序之间共享数据。我假设,因为你没有明确要求这个,你有一些想法。如果没有,我将向您指出在应用程序设计器中创建多窗口应用程序和共享数据的文档以及此答案。handle
或者,您可以利用 mlapps 是超类成员的事实,因此具有内置事件ObjectBeingDestroyed
. 您可以为此事件构造一个侦听器(请参阅addlistener
和this)并将其绑定到主应用程序中的方法,然后根据设置应用程序上所做的更改更新主应用程序。
或者:
如果 settingsUI 存储在主应用程序的属性中,例如app.settingsUI
,并且被主应用程序实例化,但可能隐藏,startupFcn
那么每次按下“设置按钮”时都不需要重新实例化,您可以简单地将其向前推进figure(app.settingsUI.UIFigure);
. 然后将其设为“模态”uiwait(app.settingsUI.UIFigure);
并覆盖 settingsUIcloseRequestFcn
以释放代码执行暂停uiresume
。关闭回调可能如下所示:
classdef settingsUI < matlab.apps.AppBase
...
function UIFigureCloseRequest(app,event)
% override close request to prevent deleting the app
% hide the settings window to appear as though it was closed
app.UIFigure.Visible = 'off';
% resume code execution so that main app can continue to run.
uiresume(app.UIFigure);
end
...
end
-干杯
推荐阅读
- gstreamer - Gstreamer 在编码 ts 段时保留时间戳
- php - 下载计数仅更新并显示第一行
- maven - 安装 maven 依赖项解析为 pom 到自己的存储库
- unit-testing - 如何在 python3 中模拟自定义异常?
- python - 逐个元素地迭代查询字符串上的列表
- python - seaborn displot 使用向量字符串定义列顺序
- java - AccessDeniedException WatchService android studio
- excel - Word 365 运行时错误“102”的 WordBasic 宏
- python - 将定制的 Pyinstaller .spec 文件与 PyArmor 一起使用
- python - 如何在运行 python 2.7 和 3.9 的 mac os 上安装 brownie