如果是创建两个窗口的APP,则需要设计两个独立的APP,并实现两个APP之间的信息传递,示例如下,在Display Plot界面点击Options按钮,会弹出一个界面Options,可以选择图形的大小以及颜色,点击OK按钮,实现信息传递,Display Plot界面上图形的颜色和大小均会改变。
要实现上述功能的多界面APP,主要分为三步:1.将信息发送给对话框 2.将信息返回给主 App 3.关闭窗口时的管理任务
具体为以下几个步骤:
1.在主 和对话框 这两个独立的APP中分别放入相应的组件。涉及的组件主要有:坐标区,按钮,下拉框,编辑字段(数字) 这四个。
2.在对话框的界面,为 。在 App 输入参数对话框中,为您的输入参数输入以逗号分隔的变量名称列表。将其中一个输入指定为存储主 App 对象的变量。然后点击确定。
将代码添加到
1 2 3 4 5 6 | % Store main app in property for CloseRequestFcn to use app.CallingApp = mainapp; % Update UI with input values app.EditField.Value = sz; app.DropDown.Value = c; |
2.从主 App 的回调中调用对话框 App。打开主 App 的代码视图,然后为选项按钮添加一个回调函数。此回调禁用选项按钮,以防止用户打开多个对话框。接下来,它获取要传递给对话框的值,然后使用输入参数和输出参数调用对话框 App。输出参数是对话框 App 对象。
1 2 3 4 5 | % Disable Plot Options button while dialog is open app.OptionsButton.Enable = 'off'; % Open the options dialog and pass inputs app.DialogApp = DialogAppExample(app, app.CurrentSize, app.CurrentColormap); |
3.在主 App 中定义一个属性,以存储对话框 App。在主 App 保持打开的情况下,创建一个名为
1 2 3 | properties (Access = private) DialogApp % Dialog box app end |
4.在主 App 中创建一个公共函数,以更新 UI。打开主 App 的代码视图,然后在编辑器选项卡上选择函数 > 公共函数。
将默认函数名称更改为所需的名称,并为您希望从对话框传递给主 App 的每个选项添加输入参数。
1 2 3 4 5 6 7 8 9 10 11 12 13 | function updateplot(app, sz, c) % Store inputs as properties app.CurrentSize = sz; app.CurrentColormap = c; % Update plot Z = peaks(sz); surf(app.UIAxes,Z); colormap(app.UIAxes,c); % Re-enable the Plot Options button app.OptionsButton.Enable = 'on'; end |
5.在对话框 App 中创建一个属性,以存储主 App。打开对话框 App 的代码视图,然后创建一个名为
1 2 3 | properties (Access = private) CallingApp % Main app object end |
6.从对话框 App 的回调中调用公共函数。在对话框 App 保持打开的情况下,为确定按钮添加一个回调函数。
在此回调中,将
1 2 3 4 5 | % Call main app's public function updateplot(app.CallingApp, app.EditField.Value, app.DropDown.Value); % Delete the dialog box delete(app) |
7.打开对话框 App 的代码视图,右键点击组件浏览器中的
1 2 3 4 5 6 7 | function DialogAppCloseRequest(app,event) % Enable the Plot Options button in main app app.CallingApp.OptionsButton.Enable = 'on'; % Delete the dialog box delete(app) end |
8.打开主 App 的代码视图,右键点击组件浏览器中的
1 2 3 4 5 | function MainAppCloseRequest(app,event) % Delete both apps delete(app.DialogApp) delete(app) end |
官网:https://ww2.mathworks.cn/help/matlab/creating_guis/creating-multiwindow-apps-in-app-designer.html