#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.
Я еще не нашел способ сделать это, но вы, возможно, не знаете, что можете:
-
выберите
LocatorPane
объект, щелкнув на пробел справа от него и перетащив влево. -
используйте 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 Я думаю, что нашел проблему и решение, которое позволяет сохранять в другие форматы. Я отредактирую свой ответ с его помощью.