主要内容

为图形对象创建回调函数

什么是回调?

一个回调是响应某些预定义的用户操作(如单击图形对象或关闭图形窗口)而执行的命令。您可以编写针对特定用户操作的响应程序回调函数处理动作,然后将函数分配给回调的财产与该用户操作相关联。例如,您可以创建一个ButtonDownFcn图的回调,以对单击图的用户编写响应程序。

本主题包含为图形对象编写回调的示例,例如,或数字对象。有关与特定图形对象关联的回调列表,请参阅该对象的属性。例如,对于一个列表数字回调,看到图的属性

有关在应用程序中为UI组件编写回调的信息,请参见为程序创建的应用程序创建回调

创建基本回调

图形回调函数必须至少接受两个输入参数:

  • 正在执行回调的图形对象——在回调函数中使用此参数来引用该对象。

  • 事件数据结构——在回调函数中使用此参数来访问有关特定于回调属性和对象的用户操作的信息。对于许多图形对象回调,此结构为空。

每当响应用户操作执行回调时,MATLAB®调用回调函数并将这两个参数传递给该函数。

要创建回调函数,首先定义一个带有所需输入参数的回调函数。然后,将函数的句柄分配给相关的回调属性。

定义回调函数

例如,创建一个名为figureCallback.m并定义一个名为figureCallback.回调函数处理用户在图形窗口中按下一个键时的操作。定义回调函数以接受两个输入参数:

  • src-使用第一个参数引用正在执行回调的特定图在图中绘制的对象。

  • 事件-使用第二个参数访问有关按键用户操作的特定信息。如果按下的键是+,增加线的宽度,如果是-,减小线的宽度。

函数figureCallback(src,event) line = findobj(src, event)“类型”“行”);如果事件。特点= =“+”线。行Width = line.LineWidth+1;elseif事件。特点= =“-”线。行Width = max(line.LineWidth-1,0.5);结束结束

为回调属性指定回调函数

在“命令窗口”中创建一个数字对象。使用@对象的函数句柄WindowKeyPressFcn属性。当用户在图形窗口中按下一个键时执行此回调。然后,在当前图中绘制一些数据。

图(WindowKeyPressFcn = f = @figureCallback);情节(1:10)

运行代码并按+.线宽增加。

请注意

对于实时编辑器中的数字,目前不支持基于键盘的回调。有关更多信息,请参见图的属性

创建带有附加输入参数的回调

方法可以创建带有附加输入参数的回调匿名函数.首先,定义一个带有任意数量输入参数的回调函数。然后,将相关的回调属性值指定为匿名函数,该函数接受MATLAB传递给回调的所需源和事件参数,然后使用适当的输入调用回调函数。

请注意

对于Live Editor中的图形,目前不支持将回调创建为匿名函数。

定义回调函数

例如,定义一个回调函数,它改变绘图的颜色然后显示x- - -y当用户单击图中的点时,命令窗口中的-坐标。创建一个名为displayCoordinates.m并定义一个名为displayCoordinates.定义回调函数以接受两个输入参数:

  • src-使用第一个参数引用正在执行回调的特定图形对象。

  • 斧头-使用第二个参数访问鼠标指针在坐标轴上的位置。

该函数不使用回调事件数据,因此不创建事件输入参数。

函数displayCoordinates src (src, ax)。MarkerEdgeColor =兰德(1、3);disp (ax.CurrentPoint (1:2))结束

为回调属性指定回调函数

方法在命令窗口中绘制坐标轴对象上的一些数据散射函数。指定ButtonDownFcn的回调属性。散射对象使用匿名函数。匿名函数接受MATLAB传递给回调函数的源和事件参数,然后调用displayCoordinates功能与所需的输入。

ax =轴;x = randn (100 1);y = randn (100 1);散射(x, y,“ButtonDownFcn”@ (src、事件)displayCoordinates (src, ax))

运行代码并单击一个绘图点。情节颜色变了,而且x- - -y-coordinates显示在命令窗口中。

有关更多信息,请参见匿名函数

虽然匿名函数为指定源和事件输入之外的回调输入参数提供了最大的灵活性,但在某些情况下,另一种方法是使用单元格数组指定回调。如果回调函数同时接受源和事件输入,然后接受任何其他参数,则可以通过指定一个单元格数组,其中函数句柄作为第一个元素,然后是函数的输入来分配回调。

例如,您可以修改displayCoordinates函数接受事件数据输入。使用字符,以指示未使用输入。

函数displayCoordinates src (src, ~, ax)。MarkerEdgeColor =兰德(1、3);disp (ax.CurrentPoint (1:2))结束

然后,您可以指定ButtonDownFcn使用单元格数组的回调属性。数组的第一个元素是displayCoordinates函数,第二个元素是传递给displayCoordinates函数在源和事件参数之后。

ax =轴;x = randn (100 1);y = randn (100 1);散射(x, y,“ButtonDownFcn”, {@displayCoordinates, ax})

创建默认回调

当您调用绘图函数时,例如情节酒吧, MATLAB创建新的图形对象,并重置大多数图形和轴属性。因此,您为特定图形对象定义的回调函数可能会被MATLAB删除。来创建一个执行的回调所有特定类型的对象在根级上指定一个回调函数作为默认值。

定义回调函数

定义一个名为customizeGrid在一个名为customizeGrid.m.该函数接受一个axes对象,并打开并定制其网格线。

函数customizeGrid ax (ax)。XGrid =“上”;斧子。YGrid =“上”;斧子。GridLineStyle =“——”;斧子。GridAlpha = 0.5;结束

为回调属性指定回调函数

执行customizeGrid函数,每当MATLAB通过设置默认轴创建一个新的轴对象CreateFcn回调的大的对象。属性指定为匿名函数,该函数接受两个必需的回调输入,然后调用customizeGrid函数对象被创建。

集(大的,“defaultAxesCreateFcn”@ (src ~) customizeGrid (src))

在图中创建多个轴。定制的网格将为它们每个出现。

ax₁=轴(“位置”,[0.1 0.1 0.8 0.35]);ax2 =轴(“位置”,[0.1 0.55 0.8 0.35]);

有关更多信息,请参见默认的属性值

默认回调保持为MATLAB会话设置。要为每个MATLAB会话设置默认回调,请将默认值赋值添加到您的startup.m文件。有关更多信息,请参见启动

相关的话题

Baidu
map