如何使用单击获取当前鼠标位置。MATLAB

如何使用单击获取当前鼠标位置。MATLAB,matlab,plot,Matlab,Plot,在这篇文章中,它展示了如下内容: 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并在myte

在这篇文章中,它展示了如下内容:

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()
中使用它。
有人能帮忙吗?谢谢

如果您没有使用指南,因此没有
句柄
结构(见底部),则可以利用图形的
UserData
属性传递任何信息:

set(gcf,'UserData',pos);
然后,您可以通过以下方式从任何其他地方访问
pos

pos = get(gcf,'UserData');
看,还有。从第一页开始:

所有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);

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

如果您没有使用指南,因此没有
句柄
结构(见底部),您可以利用图形的
UserData
属性传递任何信息:

set(gcf,'UserData',pos);
然后,您可以通过以下方式从任何其他地方访问
pos

pos = get(gcf,'UserData');
看,还有。从第一页开始:

所有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);

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

您能举个简单的例子吗?那么,您想对
mytestfunction
中的
pos
做什么?然后我可以举个例子,我已经弄明白了。我使用这个:set(f,'WindowButtonDownFcn','pt=mytestcallback()');那么pt是我需要的返回值。但是谢谢@chappjc@tqjustc如果您希望
pt
转到基本工作区,而不是
mytestfunction
,那么这非常好。如果您想让
pt
返回到
mytestfunction
进行GUI处理,您必须执行其他技巧。您能举一个简单的例子吗?那么,您想如何处理
mytestfunction
中的
pos
?然后我可以举个例子,我已经弄明白了。我使用这个:set(f,'WindowButtonDownFcn','pt=mytestcallback()');那么pt是我需要的返回值。但是谢谢@chappjc@tqjustc如果您希望
pt
转到基本工作区,而不是
mytestfunction
,那么这非常好。如果您想让
pt
返回到
mytestfunction
以供GUI进行某些处理,则必须执行其他技巧。