如何通过单击获取当前鼠标位置。 MATLAB

时间:2013-11-12 23:09:20

标签: matlab plot

在这篇文章Matlab: How to get the current mouse position on a click by using callbacks中,它显示如下内容:

function mytestfunction()
f=figure;
set(f,'WindowButtonDownFcn',@mytestcallback)

function mytestcallback(hObject,~)
pos=get(hObject,'CurrentPoint');
disp(['You clicked X:',num2str(pos(1)),', Y:',num2str(pos(2))]);

但是,我无法获取pos并在mytestfunction()中使用它。 有人可以帮忙吗?谢谢!

1 个答案:

答案 0 :(得分:4)

如果您没有使用GUIDE,因此没有handles结构(参见下图),您可以利用图中的UserData属性传递任何信息:

set(gcf,'UserData',pos);

然后您可以通过以下任何地方访问pos

pos = get(gcf,'UserData');

请参阅this MathWorks description of the UserData propertythis full example。从第一页开始:

  

所有GUI组件(包括菜单和图形本身)都具有UserData属性。您可以将任何有效的MATLAB工作空间值指定为UserData属性的值,但一次只能存在一个值。

作为此限制的变通方法,您可以将struct分配给UserData,其中包含程序在不同字段中存储所需的所有属性。

我在上面的命令中遗漏的一个细节是图形/对象句柄(你可能实际上并不想使用gcf)。在mytestfunction中,您将其存储在f中。在回调中,您可以找到hObject的父图:

f = ancestor(hObject,'figure');

使用上述方法的一种方法是简单地等待UserData属性中的更改:

function mytestfunction()
f=figure; set(f,'WindowButtonDownFcn',@mytestcallback)
maxPos=10; cnt=0;
while cnt<maxPos, waitfor(f,'UserData'); pos=get(gcf,'UserData'), cnt=cnt+1; end

function mytestcallback(hObject,~)
pos=get(hObject,'CurrentPoint');
set(ancestor(hObject,'figure'),'UserData',pos);

请注意,处理事件的另一种方法是实现a listener以响应点击事件,但WindowButtonDownFcn回调应该可以正常工作。


最初,我在想GUIDE,你将拥有handles结构。这是handles结构的一个目的。将该职位存储在handles字段中,并将其更新:

 handles.pos = pos;          % store it
 guidata(hObject,handles);   % update handles in GUI

然后返回mytestfunction或其他任何需要访问pos的回调,如果handles.pos结构是最新的,您可以使用handles