主要内容

为图形对象创建回调函数

什么是回调?

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

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

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

创建基本回调

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

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

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

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

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

定义回调函数

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

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

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

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

将回调函数赋给回调属性

在命令窗口中创建一个数字对象。使用操作符将函数句柄赋值给WindowKeyPressFcn图形的性质。当用户按下图形窗口中的一个键时,执行这个回调。然后,在当前图中绘制一些数据。

f = figure(windowkeypresscn =@figureCallback);情节(1:10)

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

请注意

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

创建带有额外输入参数的回调函数

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

请注意

在Live Editor中,目前不支持将回调函数创建为匿名函数。金宝app

定义回调函数

例如,定义一个回调函数来更改标记边缘颜色,然后显示x- - -y当用户单击标记时,在命令窗口中显示-坐标。创建一个名为displayCoordinates.m并定义一个回调函数displayCoordinates.定义回调函数以接受三个输入参数:

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

  • -指定第二个参数的字符,以指示函数不使用回调事件数据。

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

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

将回调函数赋给回调属性

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

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

运行代码并单击一个标记。标记笔边缘颜色改变,并且x- - -y-坐标显示在命令窗口。

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

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

例如,您可以指定ButtonDownFcn的Callback属性。散射对象使用单元格数组。数组的第一个元素是displayCoordinates函数,第二个元素是传递给displayCoordinates函数在源参数和事件参数之后。

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

创建回调作为默认值

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

定义回调函数

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

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

将回调函数赋给回调属性

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

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

在图形中创建多个轴。将为它们中的每一个显示定制的网格。

Ax1 =坐标轴(“位置”,[0.1 0.1 0.8 0.35]);Ax2 =轴“位置”,[0.1 0.55 0.8 0.35]);

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

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

相关的话题