Щелкните правой кнопкой мыши меню на графическом элементе LocatorPane в Mathematica

#wolfram-mathematica #contextmenu #graphic

#wolfram-mathematica #контекстное меню #графический

Вопрос:

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

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

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

 FrontEndExecute[FrontEndToken["SelectionSaveSpecial"]]
  

Я хочу, чтобы при щелчке правой кнопкой мыши на графическом элементе LocatorPane открывалось окно «Сохранить как».

Комментарии:

1. Добро пожаловать в stackoverflow Jalil! Не забудьте проголосовать за ответы ниже, которые вам нравятся, и если один из них удовлетворит вас ответом на ваш вопрос, пожалуйста, примите его, используя галочку рядом с ответом. Вы можете изменить свой выбор, когда захотите.

2. Спасибо за обновление. Это намного понятнее.

3. Ваша цель сохранить изображение LocatorPane или что-то еще?

4. Я хочу вызвать «сохранить графику как», щелкнув правой кнопкой мыши на графике LocatorPane.

5. @Mr.Wizard Я отредактировал вопрос. Пожалуйста, посмотрите это.

Ответ №1:

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

 CellPrint[
 Cell[BoxData[SuperscriptBox["x", "2"]], "Output", 
  ContextMenu -> 
   FEPrivate`FrontEndResource["ContextMenus", "Graphics"]]]
  

Комментарии:

1. @Alexey: когда я использовал этот код: LocatorPane [{1, 1} / 2, Графика [{Серый, Диск []}]] , меню щелчка правой кнопкой мыши отключено, и активен только щелчок левой кнопкой мыши. я хочу, чтобы в этом примере для графики было меню щелчка правой кнопкой мыши.

2. @Jalil Я не знаю, как включить контекстное меню щелчка правой кнопкой мыши на LocatorPane , но для каких целей вам это нужно? Вы можете выделить, а затем скопировать / вставить LocatorPane , выделив его мышью, как обычный текст.

3. @Alexey при запуске LocatorPane[{1, 1}/2, Graphics[{Gray, Disk[]}]] создается графический элемент. Я не могу скопировать это изображение, выбрав его как текст. Я хочу, чтобы меню щелчка правой кнопкой мыши было таким же, как и на других графических изображениях.

4. @Jalil В действительно, вы можете это сделать! Попробуйте {LocatorPane[{1, 1}/2, Graphics[{Gray, Disk[]}]]} . Вам просто нужно использовать сочетания клавиш Ctrl C и Ctrl V для копирования-вставки!

5. @Jalil Для выбора всего Cell содержимого вы также можете дважды щелкнуть внутри свободной области ячейки.

Ответ №2:

Вы сказали:

Я хочу вызвать «сохранить графику как», щелкнув правой кнопкой мыши на графике LocatorPane.

Я еще не нашел способ сделать это, но вы, возможно, не знаете, что можете:

  1. выберите LocatorPane объект, щелкнув на пробел справа от него и перетащив влево.

  2. используйте menu 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"]
   ]
]]
  

Комментарии:

1. @Mr.Wizard На моем компьютере появляется диалоговое окно «Сохранить как …», но оно ничего не сохраняет. В целевом каталоге файл не создан.

2. @Alexey да, я протестировал это сейчас, ни один файл не был создан с помощью меню сохранить как.

3. @Alexey @Jalil какую версию вы используете? Это работает в Mathematica 7.0.1 в Windows XP. Пожалуйста, также попробуйте это после удаления строки SelectionMove[EvaluationNotebook[], All, GeneratedCell]; , но я должен сначала щелкнуть внутри панели (переместить селектор), прежде чем щелкнуть правой кнопкой мыши, чтобы это сработало. Кроме того, в какой формат вы пытаетесь сохранить? Я использовал . GIF, возможно, не все из них работают. Я изучу это.

4. Похоже, что я могу сохранять в .gif, .jpg и .png, но не в .bmp, .pdf или .emf. Пожалуйста, попробуйте первые три и скажите мне, работает ли какой-либо из них. По крайней мере, это было бы началом.

5. @Jalil @Alexey Я думаю, что нашел проблему и решение, которое позволяет сохранять в другие форматы. Я отредактирую свой ответ с его помощью.