对多个 App 设计工具组件使用一个回调

本文介绍了如何在应用程序中通过共享回调功能,使用户可以通过编辑字段输入或UpdatePlot按钮更新等高线图。详细步骤包括设置编辑字段值、添加ButtonPushedFcn回调和共享回调至编辑字段,以及调整坐标区属性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        当要在App 中提供多种方法来执行某个操作时,在组件间共享回调非常有用。例如,当用户点击按钮或在编辑字段中按下 Enter 键时,App 可以用同样的方式响应。

共享回调的示例

        此示例说明如何创建一个 App,其中包含共享一个回调的两个 UI 组件。该 App 显示具有指定层数的等高线图。当用户更改编辑字段中的值时,他们可以按 Enter 或点击 Update Plot 按钮来更新绘图。

如图所示:

App with a contour plot, an edit field labeled "Levels", and a button labeled "Update Plot"

  1. 在 App 设计工具中,将坐标区组件从组件库拖到画布上。然后进行以下更改:

    • 双击标题,将其更改为 Select Contours of Peaks Function。

    • 双击 X 轴和 Y 轴标签,然后按 Delete 键删除它们。

  2. 编辑字段(数值) 组件拖到画布上的坐标区下方。然后进行以下更改:

    • 双击编辑字段旁边的标签,将其更改为 Levels:。

    • 双击编辑字段,并将默认值更改为 20。

  3. 按钮组件拖到画布上的编辑字段旁边。然后双击其标签,将标签更改为 Update Plot。

  4. 添加在用户点击该按钮时执行的回调函数。右键点击 Update Plot 按钮,然后选择回调 > 添加 ButtonPushedFcn 回调

  5. App 设计工具会切换到代码视图。将以下代码粘贴到 UpdatePlotButtonPushed 回调的主体中:

    Z = peaks(100);
    nlevels = app.LevelsEditField.Value;
    contour(app.UIAxes,Z,nlevels);
  6. 接下来,与编辑字段共享回调。在组件浏览器中,右键点击 app.LevelsEditField 组件,然后选择回调 > 选择现有的回调。当显示“选择回调函数”对话框时,从名称下拉列表中选择 UpdatePlotButtonPushed

    如图所示:

    Select Callback Function dialog box. The Callback drop-down list has ValueChangedFcn selected and the Name drop-down list has UpdatePlotButtonPushed selected.

    共享此回调将允许用户在更改编辑字段中的值并按 Enter 键后更新绘图。用户也可以更改值并按 Update Plot 按钮。

  7. 接下来,设置坐标区纵横比和范围。在组件浏览器中,选择 app.UIAxes 组件。然后,在坐标区选项卡中进行以下更改:

    • 将 PlotBoxAspectRatio 设置为 1,1,1。

    • 将 XLim 和 YLim 设置为 0,100。

  8. 点击运行以保存并运行 App。

    Run button

App Designer 是 MATLAB 中的一个交互式开发环境,用于创建应用程序界面。在 App Designer 中,你可以定义回调函数来响应用户界面组件(如按钮、文本框等)的事件。如果你想在一个回调函数中设置变量的值,然后在另一个回调函数中使用这些值,有几种方法可以实现变量的传递。 1. 使用应用数据存储变量(Application Data Store): 在 App Designer 中,你可以定义应用数据存储变量来在回调函数之间共享数据。这些变量在应用的生命周期内一直存在,可以被多个回调函数访问和修改。 2. 使用全局变量: 虽然不推荐在大型项目中使用全局变量,但在某些简单的情况下,你可以定义全局变量来在回调函数之间传递数据。使用 `global` 关键字在回调函数中声明全局变量,这样就可以在这些函数中修改全局变量的值。 3. 使用 MATLAB 的句柄图形特性: 通过访问组件的 `Tag` 属性,你可以设置标签来标识特定的组件,然后在回调函数中使用这些标签来获取或者设置组件的属性值。 4. 使用返回值和参数: 编写一个函数,将需要传递的变量作为参数或返回值。在第一个回调函数中调用这个函数,并将结果传递给第二个回调函数。 例如,如果你想在两个回调函数之间共享数据,你可以定义一个应用数据存储变量: ```matlab classdef MyApp < matlab.apps.AppBase properties (Access = public) % 应用数据存储变量 myDataStore end methods (Access = private) % 第一个回调函数,设置数据 function setMyData(app, data) app.myDataStore = data; end % 第二个回调函数,获取数据 function useMyData(app) data = app.myDataStore; % 使用数据的代码... end end % 确保在开始时初始化应用数据存储变量 methods (Access = private) function startupFcn(app) app.myDataStore = []; % 初始化数据存储变量 end end % 其他的App Designer代码... end ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值