R закрыть `menu` окно (tcltk)? (эквивалентно graphics.off для tcltk?) - PullRequest
0 голосов
/ 29 февраля 2012

Быстрый вопрос - я использую функцию menu в R с graphics=TRUE. Для меня, так как я нахожусь на Linux, это приводит к отображению tcltk диалога. (Вы знаете, как, когда вы делаете install.packages('some_package') R, появляется окно, предлагающее вам выбрать, какое зеркало CRAN вы хотите удалить? Это то, что я имею в виду).

Иногда после того, как я сделал свой выбор (который работает нормально), окно затем отказывается исчезать или реагировать на любые щелчки - я могу продолжить сеанс R в обычном режиме, но это окно будет зависать, несмотря на мои попытки закрыть его вниз (с помощью кнопки «x» в углу или кнопок «OK» и «Отмена» в самом диалоге).

Есть ли способ, которым я могу уничтожить это окно, если у меня нет ручки к нему? Я ищу эквивалент graphics.off для tcltk.

Кроме того, я заметил, что я часто получаю ошибку [tcl] grab failed: window not viewable. при использовании menu(..,graphics=TRUE), так что это может быть связано.

веселит.

1 Ответ

6 голосов
/ 29 февраля 2012

Материал, который случается только иногда, трудно воспроизвести, и часто из-за ошибок, и его трудно выяснить без полной спецификации вашей машины. Тем не менее, я могу получить аналогичное поведение и исправить его:

> library(tcltk)
Loading Tcl/Tk interface ... done
> menu(letters[1:5],graphics=TRUE)
^C

Нажав Control-C в этот момент, я получаю приглашение R и диалоговое окно без ответа, с которым у меня нет ручки. Использование элементов управления оконного менеджера ничего не делает, изменение размера не обновляет окно. Итак ...

> tclServiceMode(TRUE)
[1] FALSE

тогда он просыпается. Затем я могу либо закрыть диалоговое окно обычным способом, либо сделать:

> tkdestroy(".1")
Error: $ operator is invalid for atomic vectors

, который избавляется от него с ошибкой, которую я не понимаю. «.1» - это путь к окну, который совпадает с заголовком окна по умолчанию, но не в том случае, если вы установили имя в меню. В этом случае ... Хм, вероятно, есть способ найти его по названию, но в любом случае, если вы установили режим обслуживания на ИСТИНА, вы можете вернуться обратно к чистоте рабочего стола.

...