如何提高事件处理程序对MouseDragged和鼠标单击事件的敏感度

时间:2011-07-12 07:28:03

标签: wolfram-mathematica

使用EventHandler,我注意到有时候它会认为我在拖动鼠标,即使我只是点击它。

这是一个简单的例子

 EventHandler[Graphics[Circle[{0, 0}, 1]],
 "MouseClicked" :> Print["mouse clicked"],
 "MouseDragged" :> Print["mouse being dragged"]
 ]

当我开始点击时,即使我确保鼠标完全固定而不移动,我只是一直点击,然后查看打印消息,偶尔我会看到拖动消息。

我知道这可能对鼠标很敏感(但我有一个好鼠标),甚至可能是鼠标垫,操作系统以及任何轻微的手动,都可能导致这种情况。

我想问一下是否有人可以尝试这个,看看你是否也注意到了这个问题,如果有人知道我可以在Mathematica中做一些设置来最小化这个问题。我正在寻找一个EventHandler选项来设置时间或延迟,以确定何时拖动鼠标,但什么也看不见。

以下是我在运行上述代码后单击时在系统上获得的示例输出

mouse being dragged
mouse clicked   
mouse clicked    
mouse clicked    
mouse clicked    
mouse clicked    
mouse clicked    
mouse clicked
mouse clicked    
mouse being dragged    
mouse clicked   
mouse clicked

这是在Windows 7上,Mathematica 8.0.1

由于

1 个答案:

答案 0 :(得分:3)

以下情况并不完美,但似乎效果更好:

initMousePos = {-1, -1};
dragged = False;
EventHandler[
 Dynamic@Graphics[Circle[{0, 0}, 1]],
 "MouseDown" :>
  (initMousePos = MousePosition["Graphics"]),
 "MouseUp" :>
  If[EuclideanDistance[MousePosition["Graphics"], initMousePos] < 2 10^-1,
   Print["MouseClicked " <> ToString@MousePosition["Graphics"]],
   Sequence @@ {}],
 "MouseDragged" :> 
  If[EuclideanDistance[MousePosition["Graphics"], initMousePos] > 2 10^-1,
   Print["mouse being dragged " <> 
     ToString@MousePosition["Graphics"]], Sequence @@ {}]]
相关问题