首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我的axes对象的ButtonDownFcn回调在打印后停止工作?

为什么我的axes对象的ButtonDownFcn回调在打印后停止工作?
EN

Stack Overflow用户
提问于 2011-03-11 21:28:35
回答 2查看 6.6K关注 0票数 3

我在图中创建了一组轴,并为其'ButtonDownFcn'属性分配了一个回调,如下所示:

代码语言:javascript
复制
HRaxes = axes('Parent', Figure, 'Position', [.05 .60 .9 .35],...
              'XLimMode', 'manual', 'ButtonDownFcn', @HR_ButtonDown);

其中回调函数的定义如下:

代码语言:javascript
复制
function HR_ButtonDown(hObject, eventData)
  %# Do some stuff here when the axes is clicked on...
end

回调运行得很好,直到我在轴上绘制了一些东西,如下所示:

代码语言:javascript
复制
plot(HRaxes, data.HR_X, data.HR_Y, 'b');

之后,当我单击轴时,回调就不再触发。哪里出了问题,我该如何修复它?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-03-11 23:51:47

这里的主要问题是函数PLOT是一个高级绘图函数,这意味着它会将对象添加到绘图中,并将修改现有的绘图设置。如果查看'NextPlot' property for axes objects,您将看到它有三个设置,用于确定高级绘图函数如何影响轴对象:

  • add -使用现有轴绘制图形objects.
  • replace -将除Position之外的所有轴属性重置为默认值,并在显示图形之前删除所有轴子对象(等效于cla reset).
  • replacechildren -移除所有子对象,但不重置轴属性(等效于cla).

由于'replace'是默认设置,因此当您调用PLOT时,为'ButtonDownFcn'回调设置的句柄将被重置为nothing,从而关闭单击按钮的行为。有两种方法可以避免这种情况:

  • 在调用PLOT之前,将轴的'NextPlot'特性设置为'add' (添加到现有打印对象)或'replacechildren' (替换现有打印对象,但保留当前axes特性设置)。

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‘);使用不修改现有绘图属性的低级绘图例程(如LINE)的

HRaxes = axes('Parent',Figure,'Position',.05 .60 .9 .35,...‘'XLimMode','manual','ButtonDownFcn',@HR_ButtonDown);line(data.HR_X,data.HR_Y,'Parent',HRaxes,’颜色‘,'b');

票数 2
EN

Stack Overflow用户

发布于 2012-03-14 08:44:42

@David Snyder,注意到image对象也可以有一个ButtonDownFcn回调属性。然后,在回调中,您可以通过Parent属性或ancestor函数访问相应的axes属性。例如,假设您要在ButtonDownFcn回调中使用像素的位置和单击时所用的按钮。绘制图像时,请使用

代码语言:javascript
复制
imh = image(some_image);
set(imh,'ButtonDownFcn',@position_and_button);

您在别处定义回调的位置

代码语言:javascript
复制
function position_and_button(hObject,eventdata)
   Position = get( ancestor(hObject,'axes'), 'CurrentPoint' );
   Button = get( ancestor(hObject,'figure'), 'SelectionType' );
   %# do stuff with Position and Button
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5273481

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档