4

在 Mathematica 中右键单击图形时,您会得到一个上下文菜单(剪切图形、复制图形、将图形另存为...),但对于 LocatorPane 图形,此右键单击菜单是禁用的。在 Mathematica 中,如何使用 EventHandler 或 MouseAction 命令调用 LocatorPane 图形的上下文菜单?什么命令创建这个菜单?

LocatorPane[{1, 1}/2, Graphics[{Gray, Disk[]}]]

我发现这段代码在mathematica中打开“另存为”窗口。

FrontEndExecute[FrontEndToken["SelectionSaveSpecial"]]

当我右键单击 LocatorPane 图形时,我想要打开“另存为”窗口。

4

2 回答 2

4

不是完整的答案,但Cells 的上下文菜单由 的ContextMenu选项控制Cell。您可以为您希望的任何单元格设置Cell带有样式的 s 的默认上下文菜单:"Graphics"

CellPrint[
 Cell[BoxData[SuperscriptBox["x", "2"]], "Output", 
  ContextMenu -> 
   FEPrivate`FrontEndResource["ContextMenus", "Graphics"]]]
于 2011-05-26T20:42:57.533 回答
2

你说:

我想通过右键单击 LocatorPane 图形来调用“将图形另存为”。

我还没有找到一种方法来做到这一点,但你可能不知道你可以:

  1. LocatorPane通过单击对象右侧的空白区域并向左拖动来选择对象。

  2. 使用菜单File > Save Selection As...以您想要的格式保存图形。


我认为正确的选项似乎不起作用:

SetOptions[EvaluationNotebook[], 
  ComponentwiseContextMenu -> {"GraphicsBox" -> 
     FEPrivate`FrontEndResource["ContextMenus", "GraphicsBox"], 
    "Graphics3DBox" -> 
     FEPrivate`FrontEndResource["ContextMenus", "Graphics3DBox"], 
    "LocatorPaneBox" -> 
     FEPrivate`FrontEndResource["ContextMenus", "GraphicsBox"], 
    "CellGroup" -> 
     FEPrivate`FrontEndResource["ContextMenus", "CellGroup"], 
    "CellBracket" -> 
     FEPrivate`FrontEndResource["ContextMenus", "CellBracket"], 
    "CellRange" -> 
     FEPrivate`FrontEndResource["ContextMenus", "CellRange"], 
    "CellInsertionPoint" -> 
     FEPrivate`FrontEndResource["ContextMenus", "CellInsertionPoint"]}
  ];

具体来说, 的值"LocatorPaneBox" ->已更改为,"GraphicsBox"但没有明显效果。

另一方面,更改 的值"GraphicsBox" -> 确实会产生影响。

我怀疑因为LocatorPane使用鼠标输入,它会捕获右键单击尝试,并且永远不会将其传递给上下文菜单机制。也许禁用鼠标作为输入设备LocatorPane会纠正这个问题,但这似乎并不实际。


这是实现您的使用建议的一种方法"SelectionSaveSpecial"

Dynamic[EventHandler[
  LocatorPane[{1, 1}/2, Graphics[{Gray, Disk[]}]],
  {"MouseClicked", 2} :> 
   FrontEndExecute[
     SelectionMove[EvaluationNotebook[], All, GeneratedCell];
     SelectionMove[EvaluationNotebook[], All, CellContents]; 
     FrontEndToken["SelectionSaveSpecial"]
   ]
]]
于 2011-05-27T08:08:37.087 回答