MATLAB爱好者论坛-LabFans.com

MATLAB爱好者论坛-LabFans.com (https://www.labfans.com/bbs/index.php)
-   资料存档 (https://www.labfans.com/bbs/forumdisplay.php?f=72)
-   -   为什么绘制对象后轴对象的ButtonDownFcn回调停止工作? (https://www.labfans.com/bbs/showthread.php?t=26570)

poster 2019-12-14 20:13

为什么绘制对象后轴对象的ButtonDownFcn回调停止工作?
 
我正在图中创建一组轴,并为其'ButtonDownFcn'属性分配一个回调,如下所示:

HRaxes = axes('Parent', Figure, 'Position', [.05 .60 .9 .35],... 'XLimMode', 'manual', 'ButtonDownFcn', @HR_ButtonDown); 回调函数的定义如下:

function HR_ButtonDown(hObject, eventData) %# Do some stuff here when the axes is clicked on... end 回调工作正常,直到我在像这样的轴上绘制了一些东西:

plot(HRaxes, data.HR_X, data.HR_Y, 'b'); 之后,当我单击坐标轴时,回调将不再触发。怎么了,我该如何解决?



[B]回答:[/B]

这里的主要问题是函数[URL="http://www.mathworks.com/help/techdoc/ref/plot.html"]PLOT[/URL]是[I]高级[/I]绘图功能,这意味着它会向绘图添加对象[I]并[/I]修改现有的绘图设置。如果查看[URL="http://www.mathworks.com/help/techdoc/ref/axes_props.html#NextPlot"]坐标轴对象[/URL]的[URL="http://www.mathworks.com/help/techdoc/ref/axes_props.html#NextPlot"]'NextPlot'属性[/URL] ,您将看到它具有三个设置,这些设置确定高级绘图功能如何影响坐标轴对象:
[LIST][*] add鈥?使用现有坐标轴来绘制图形对象。
[*] replace除Position以外的所有轴属性重置为其默认值,并在显示图形之前删除所有轴子级(等同于cla reset )。
[*] replacechildren删除所有子对象,但不重置轴属性(等效于cla )。
[/LIST]由于'replace'是默认设置,因此您在调用[URL="http://www.mathworks.com/help/techdoc/ref/plot.html"]PLOT[/URL]时为'ButtonDownFcn'回调设置的句柄将重置为'ButtonDownFcn' ,从而关闭了按钮单击行为。有两种方法可以避免这种情况:
[LIST][*]设置'NextPlot'轴的财产要么'add' (添加到现有的情节对象)或'replacechildren' (以取代现有的情节对象,但保留当前轴的属性设置),你让你在打电话前[URL="http://www.mathworks.com/help/techdoc/ref/plot.html"]PLOT[/URL] 。

HRaxes = axes('Parent', Figure, 'Position', [.05 .60 .9 .35],... 'XLimMode', 'manual', 'ButtonDownFcn', @HR_ButtonDown,... 'NextPlot', 'add'); plot(HRaxes, data.HR_X, data.HR_Y, 'b');[*]使用不修改现有绘图属性的较低级绘图例程(例如[URL="http://www.mathworks.com/help/techdoc/ref/line.html"]LINE[/URL] ):

HRaxes = axes('Parent', Figure, 'Position', [.05 .60 .9 .35],... 'XLimMode', 'manual', 'ButtonDownFcn', @HR_ButtonDown); line(data.HR_X, data.HR_Y, 'Parent', HRaxes, 'Color', 'b');[/LIST]
[url=https://stackoverflow.com/questions/5273481]更多&回答...[/url]


所有时间均为北京时间。现在的时间是 09:05

Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.