R关闭菜单窗口(tcltk)? (相当于tcltk的graphics.off?)

问题描述:

快速的问题 - 我在graphics=TRUE中使用R中的menu函数。 对我来说,因为我在linux上,所以会显示一个tcltk对话框。 (你知道在你做什么时install.packages('some_package') R弹出一个窗口,告诉你选择你想删除哪个CRAN镜像?这就是我的意思)。R关闭菜单窗口(tcltk)? (相当于tcltk的graphics.off?)

有时,在我做出选择后,窗口会拒绝消失或响应任何点击 - 我可以像平常一样继续我的R会话,但这个窗口仍会继续运行,尽管我努力关闭(通过转角处的关闭'x'按钮,或通过对话本身上的'OK'和'Cancel'按钮)。

有没有一种方法可以销毁这个窗口,因为我没有处理它? 我正在寻找tcltk的等效graphics.off

此外,我注意到,当使用menu(..,graphics=TRUE)时,我经常会遇到错误[tcl] grab failed: window not viewable.,所以这可能是相关的。

欢呼声。

+0

顺便说一下,这种烦恼在我的Ubuntu机器R 2.14上可靠地发生,但不在我的Fedora机器上,并且当'graphcs = TRUE'时这些都使用tcltk接口。 – 2012-02-29 00:41:46

只有时会发生的东西很难再现,而且通常是由于缺陷,并且很难在没有完整的机器规格的情况下弄清楚。不过,我可以可靠地获得类似的行为,我能解决这个问题:

> 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”是窗口路径,与默认窗口标题相同 - 但如果您在菜单上设置了名称,则不会。在这种情况下...嗯,可能有一种方法可以从名称中查找它,但无论如何,一旦将服务模式设置为TRUE,您可以单击返回到桌面整洁的方式。

+1

诊断:Tcl/Tk事件循环未被服务。这很关键,因为事件是OS/X11/WM如何与Tk进行通信。 (从技术上讲,他们发送文件描述符上的消息,将“事件循环”转换为可分派事件。) – 2012-02-29 10:54:46

+0

非常感谢!我确实命名了我的菜单,但我肯定会用'tclServiceMode(TRUE)'得到我自己关闭的窗口。我想知道这个'[tcl]:失败'意味着什么(我认为这是问题的原因),但是我可以可靠地再现它的情况有点奇怪,我需要缩小它们在此之前我可以提问。 – 2012-02-29 10:59:03