事件处理程序不允许我在分配鼠标单击时选择图形



我正在尝试数字化图像中的点,我想使用 KeyDown 事件来清除选定的点。要使 KeyDown 正常工作,必须通过单击图像来选择图像(图像周围显示橙色边框)。分配鼠标单击后,它将在我的图像中注册该点,但不会选择该图像,因此 KeyDown 将不起作用。我已经发现我可以使用鼠标右键选择图像。我希望找到一种方法,让代码在创建文档后立即自动为我选择图像。有人知道如何做到这一点吗?

这是我的研究,以便我可以数字化超声图像中特征的位置。

我尝试以几种不同的方式使用 SelectionMove[] 函数,但它不起作用。

CreateDocument[
  DynamicModule[
   {pnts = {}},
   EventHandler[
    Show[
     img,
     Epilog -> {Red, Point[Dynamic[pnts]]}
     ],
    {
     {"MouseClicked", 
       1} :> {AppendTo[pnts, MousePosition["Graphics"]]},
     "EscapeKeyDown" :> {pnts = {}}
     }
    ]
   ]
  ];

它打开图像,我可以放置点。但是,我无法使用EscapeKeyDown清除它们。

我的图片 -> https://i.stack.imgur.com/bKKqC.jpg

看起来这个问题在文档中得到了模糊的答案:"对于鼠标事件,EventHandler[expr,...]处理鼠标位于 expr 显示定义的矩形区域内的事件。 暗示键盘事件的工作方式不同。

你可以使用这样的东西。

pnts = {};
SetOptions[CreateDocument[
   EventHandler[Show[img, Epilog -> {Red, Point[Dynamic[pnts]]}],
    {"MouseClicked", 1} :> AppendTo[pnts, MousePosition["Graphics"]]]], 
 NotebookEventActions :> {"EscapeKeyDown" :> (pnts = {})}]

最新更新