如何在鼠标移动时连续读取鼠标位置,而没有单击事件?

416次浏览(过去30天)
当鼠标在图形周围移动时,我希望连续读取鼠标的(x, y)位置,而不需要显式地单击特定位置以使用GINPUT或等效函数。

接受的答案

MathWorks支援小组
MathWorks支援小组 2009年6月27日
可以在MATLAB中连续记录鼠标位置,而不需要发生鼠标单击事件。可以使用图形的'CurrentPoint'属性读取图形窗口上的当前光标(鼠标)位置。因为你需要在每次鼠标移动时读取这个鼠标位置,你需要给图形窗口的'WindowButtonMotionFcn'属性分配一个回调函数。这个回调函数会读取上面提到的'CurrentPoint'属性。
例如,在MATLAB提示符下打开一个新的图形窗口。现在,我们将'WindowButtonMotionFcn'属性设置为指向每次鼠标在图形上移动时执行的回调函数。我们将创建这个回调函数,但现在我们将它称为“mouseMove”。下面的语句为这个回调函数赋值。
集(gcf,“WindowButtonMotionFcn”, @mouseMove);
现在,我们通过在MATLAB命令提示符下键入'edit mouseMove'在MATLAB编辑器中创建这个回调函数。回调函数的示例如下所示,但是在您的函数中,您应该包括当鼠标移动时要执行的步骤。
函数mouemove(对象,事件数据)
C = get (gca,“CurrentPoint”);
标题(gca, ('(x, y) = ('num2str (C (1,1)),”、“, num2str (C(1、2),“)”]);
将此函数保存在路径中,然后将鼠标移动到图形上。鼠标位置将连续地打印在轴的标题中。
11日评论
芭芭拉Kammerl
芭芭拉Kammerl 2021年4月15日
我对MATLAB相对陌生,但我在App Designer中尝试和错误后成功获得了鼠标位置,但主要归功于这个线程: https://de.mathworks.com/matlabcentral/answers/603649-how-to-get-mouse-coordinates-in-gui-appdesigner
它在轴场中不起作用,但你可以在整个应用程序窗口中获得鼠标的大致位置。也许你可以用这个和轴场的一般位置来计算鼠标的位置。x轴和y轴的0-Position是左下角。
我把它作为一个新函数
属性(Access = private)
X = 0% x位置
Y = 0% y位置
结束
方法(Access = private)
函数Func(应用,坐标轴,事件)
app.x = axes.CurrentPoint(1,1);%在回调函数之外访问x和y
app.y = axes.CurrentPoint(1,2);
app.xEditField.Value = app.x;将x值放在数字字段"x"中
app.yEditField.Value = app.y;将y值放在数值字段"y"中
结束
结束
并添加到startupFcn(app):
app. ufigue . windowbuttonmotionfcn = @app.func;
我希望这能帮助到一些人。

登录评论。

更多答案(1)

raym
raym 2017年3月24日
编辑:MathWorks支援小组 2021年6月24日
你确定MATLAB只能在GUI中获得鼠标坐标吗?实际上,获取鼠标在屏幕上的任何位置非常简单,不依赖于GUI。
使用以下方法:
尝试移动你的鼠标,每次调用这个命令。您将看到当鼠标移动时输出一直在变化。您将看到它独立于GUI工作。
该函数的输出将返回一个双元素数组,其中第一个元素是x或列位置,第二个元素是鼠标的y或行位置。请记住,参考点是相对于屏幕的左下角。因此,将鼠标放在屏幕的左下角应该会产生(1,1),而将鼠标放在屏幕的右上角则会产生屏幕的分辨率。
现在,如果您想连续获取鼠标的位置,可以考虑将此调用放在while循环中,同时暂停一小段时间,这样就不会使CPU过载。因此,可以这样做:
while condition loc = get(0, 'CurrentPosition');
%//做点什么
%……
%……
暂停(0.01);%//暂停0.01毫秒
结束

类别

了解更多迁移指南应用程序帮助中心而且文件交换

2022世界杯八强谁会赢?

世界杯预选赛小组名单社区寻宝

在MATLAB Central中找到宝藏,并发现社区如何帮助您!世界杯预选赛小组名单

开始狩猎!

Baidu
map