Меню правой кнопки мыши на изображении LocatorPane в Mathematica - PullRequest
4 голосов
/ 27 мая 2011

Если щелкнуть правой кнопкой мыши по графике в Mathematica, вы получите контекстное меню (вырезать графику, скопировать графику, сохранить графику как ...), но для графика LocatorPane это контекстное меню отключено.Как я могу вызвать контекстное меню для графики LocatorPane с помощью EventHandler или команды MouseAction в Mathematica?Какая команда создает это меню?

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

Я нахожу этот код, чтобы открыть окно "Сохранить как" в Mathematica.

FrontEndExecute[FrontEndToken["SelectionSaveSpecial"]]

Я хочу, когда я щелкаю правой кнопкой мыши по значку LocatorPane "СохранитьКак "окно открыто.

Ответы [ 2 ]

4 голосов
/ 27 мая 2011

Не полный ответ, но контекстные меню Cell s управляются параметром ContextMenu Cell.Вы можете установить контекстное меню по умолчанию Cell s со стилем "Graphics" для любой ячейки, которую вы хотите:

CellPrint[
 Cell[BoxData[SuperscriptBox["x", "2"]], "Output", 
  ContextMenu -> 
   FEPrivate`FrontEndResource["ContextMenus", "Graphics"]]]
2 голосов
/ 27 мая 2011

Вы сказали:

Я хочу вызвать «сохранить рисунок как», щелкнув правой кнопкой мыши на графике 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"]
   ]
]]
...