主要内容

为以编程方式创建的应用编写回调

要在应用程序中编写一个UI组件来响应应用程序用户的输入,请创建一个回调函数用于那个UI组件。回调函数是响应用户交互(如单击按钮)而执行的函数。每个UI组件都有多个回调函数属性,每一个都对应一个特定的动作。当用户运行你的应用程序并执行其中一个动作时,MATLAB®执行分配给关联回调属性的函数。

例如,如果你的应用程序包含一个按钮,你可能希望在用户单击该按钮时更新应用程序。可以通过编写一个执行更新的函数,然后设置ButtonPushedFcn属性设置为函数的句柄。在创建组件时,可以将回调函数作为名称-值参数分配给回调属性,也可以在代码中的任何地方使用点表示法设置属性。

要确定UI组件具有的回调属性,请参阅特定UI组件的属性页。

回调函数参数

当UI组件执行回调函数时,MATLAB自动将两个输入参数传递给函数。这些输入参数通常被命名src而且事件.第一个参数是触发回调的UI组件。第二个参数为回调函数提供事件数据。它提供的事件数据特定于回调属性和组件类型。要确定与回调属性关联的事件数据,请参阅执行回调的UI组件的属性页。

例如,updateDropDown函数使用这些回调输入在用户键入新值时将项添加到可编辑的下拉菜单。时additem回调,src包含下拉组件和事件包含关于交互的信息。函数使用事件。编辑属性检查该值是用户键入的新值还是现有项。然后,如果值为new,则函数使用事件。价值属性将值添加到下拉项中。

要运行此函数,请将其保存到名为updateDropDown.m在MATLAB路径上。在下拉菜单中键入新值,按输入,查看更新后的下拉菜单项。

函数updateDropDown fig = ufigu (“位置”,[500 500 300 200]);Dd = uidropdown(fig,...“可编辑”“上”...“项目”, {“红色”“绿色”“蓝”},...“ValueChangedFcn”, @addItems);结束函数addItems(src,event) val = event. value;如果事件。编辑src.项目{end+1} = val;结束结束

带有标签和下拉菜单的UI图形窗口。下拉值为“Purple”,项目包含“Purple”作为选项。

指定回调函数

用以下方法之一将回调函数分配给回调属性:

指定函数句柄

函数句柄提供了一种将函数表示为变量的方法。函数可以是与应用程序代码位于同一文件中的本地函数或嵌套函数,也可以是在MATLAB路径上的单独文件中定义的函数。要创建函数句柄,请指定@运算符放在函数名之前。

例如,要创建响应单击的按钮,请将以下函数保存到名为codeButtonResponse.m在MATLAB路径上。属性创建按钮uibutton函数,并设置ButtonPushedFcn属性设置为函数的句柄buttonCallback.它使用符号创建这个句柄@buttonCallback.注意,函数句柄没有显式引用任何输入参数,但函数声明中包含src而且事件输入参数。

函数codeButtonResponse fig = ufig (“位置”,[500 500 300 200]);BTN = uibutton(图,“ButtonPushedFcn”, @buttonCallback);函数buttonCallback (src、事件)disp (“按钮按下”);结束结束

带有按钮组件的UI图形窗口。

将回调函数指定为函数句柄的一个好处是,当您将每个回调函数分配给组件时,MATLAB会检查它的语法错误和缺失的依赖项。如果回调函数中出现问题,MATLAB会立即返回错误,而不是等待用户触发回调。这种行为可以帮助您在用户遇到问题之前发现代码中的问题。

指定单元格数组

所有回调函数都接受源和事件的两个输入参数。若要指定接受这两个以外的其他输入参数的回调,请使用单元格数组。单元格数组中的第一个元素是函数句柄。单元格数组中的其他元素是您想要使用的其他输入参数,用逗号分隔。所指定的函数必须接受源参数和事件参数作为其前两个输入参数,如中所述指定函数句柄.但是,您可以在函数声明中定义前两个参数之后的其他输入。

例如,codeComponentResponse函数创建一个按钮和一个复选框组件,它们都使用相同的函数作为回调,但传递给它的参数不同。要为不同的组件指定不同的输入参数,请将两个组件的回调属性设置为单元格数组。单元格数组的第一个元素是句柄componentCallback函数,第二个参数是传递给函数的附加输入参数。

要运行此示例,将函数保存到名为codeComponentResponse.m在MATLAB路径上。当您选择或清除复选框时,MATLAB将显示您单击了复选框.当你点击按钮,MATLAB显示你点击了按钮

函数codeComponentResponse fig = ufigure (“位置”,[500 500 300 200]);CBX = uicheckbox(图,“位置”,[100 125 84 22],...“ValueChangedFcn”, {@componentCallback,“复选框”});BTN = uibutton(图,“位置”,[100 75 84 22],...“ButtonPushedFcn”, {@componentCallback,“按钮”});函数componentCallback (src、事件comp) disp ([你点击了comp]);结束结束

按钮组件上方带有复选框组件的UI图形窗口。

与指定为函数句柄的回调一样,当您将回调函数分配给组件时,MATLAB会检查指定为单元格数组的回调函数是否存在语法错误和缺失依赖项。如果回调函数中有问题,MATLAB会立即返回错误,而不是等待用户触发回调。这种行为可以帮助您在用户遇到问题之前发现代码中的问题。

指定匿名函数

匿名函数是指不存储在程序文件中的函数。在以下情况下指定匿名函数:

  • 您希望UI组件执行一个不支持函数句柄和单元格数组所需的两个源和事件参数的函数。金宝app

  • 您需要一个UI组件来执行脚本。

  • 回调由单个可执行语句组成。

若要指定匿名函数,请使用执行回调函数、脚本或语句的两个必需的源和事件输入参数创建函数句柄。

例如,changeSlider函数创建一个滑块UI组件和一个按钮来增加滑块的值。的incrementSlider函数没有源和事件输入参数,因为它被设计为可在回调内部或外部调用。执行incrementSlider按钮按下时,创建一个匿名函数接受src而且事件输入参数,忽略它们,然后执行incrementSlider

运行changeSlider函数,将下面的代码保存到一个名为changeSlider.m在MATLAB路径上。

函数changeSlider fig = ufigure (“位置”,[500 500 300 200]);S = uislider(图,“位置”,[75 150 150 3]);incrementSlider;B = uibutton(图,“位置”,[100 50 100 22],...“文本”“增量”...“ButtonPushedFcn”@ (src、事件)incrementSlider);函数incrementSlider如果(2) s.Value = s.Value + 1;结束结束结束

一个带有值为1的滑块组件的UI图形窗口,以及在滑块下方带有文本“Increment”的按钮。

当回调是单个可执行语句时,可以将回调指定为匿名函数,以避免需要为该语句定义单独的函数。例如,下面的代码创建一个显示按钮按下当通过将回调指定为匿名函数来单击按钮时。

图= ufigure图(“位置”,[500 500 300 200]);BTN = uibutton(图,“ButtonPushedFcn”@ (src、事件)disp (“按钮按下”));

带有按钮组件的UI图形窗口。

与指定为函数句柄或单元格数组的回调不同,当将回调函数分配给组件时,MATLAB不会检查指定为匿名函数的回调是否存在语法错误和缺失依赖项。如果匿名函数有问题,在用户触发回调之前,它都不会被检测到。

指定包含MATLAB命令的文本(不推荐)

当希望执行一些简单命令时,可以将回调指定为字符向量或字符串标量,但如果回调包含多个命令,则可能难以管理。与指定为函数句柄或单元格数组的回调不同,MATLAB可以检查字符向量或字符串是否有语法错误或缺少依赖项。如果MATLAB表达式有问题,则在用户触发回调之前都不会检测到问题。指定的字符向量或字符串必须由有效的MATLAB表达式组成,其中可以包括函数的参数。

例如,下面的代码创建一个UIAxes对象和一个按钮,该按钮在单击时在坐标轴上绘制随机数据。注意这个字符向量的情节(ax,兰德(20,3))”包含一个变量,斧头的变量斧头当用户触发回调时,必须存在于基本工作空间中,否则MATLAB将返回错误。在分配回调属性值时,该变量不需要存在,但在用户触发回调时必须存在。

运行代码,然后单击按钮。自斧头存在于基本工作空间中,回调命令有效,MATLAB绘制数据。

FIG = ufigure;Ax = uiaxes(fig,“位置”,[125 100 300 300]);B = uibutton(图,“位置”,[225 50 100 22],...“文本”“阴谋数据”...“ButtonPushedFcn”的情节(ax,兰德(20,3))”);

带有轴和按钮组件的UI图形窗口。按钮文本显示“Plot Data”。坐标轴上显示了三行随机数据。

相关的话题