我正在使用gWidgets工具包在使用Rscript运行的R脚本中创建图形用户界面。
创建GUI后,脚本将退出。
我可以通过在脚本末尾执行一个while(TRUE){Sys.sleep(9999)}循环来防止这种情况发生,但这看起来有点老生常谈。
有没有更好的方法告诉R只在GUI关闭时退出,或者至少在GUI构造完成后进入REPL?
发布于 2011-10-25 09:51:34
你也许可以根据你的需要调整gbasicdialog。此构造函数创建一个模式容器,您可以从中派生其他窗口。下面是一个示例:
library(gWidgets)
options(guiToolkit="RGtk2")
require(fortunes) # just for fun
hold_it <- gbasicdialog(do.buttons=FALSE)
b <- gbutton("click me for a message", cont=hold_it, handler=function(h,...) {
gmessage(paste(fortune(), collapse="\n"), parent=hold_it)
})
visible(hold_it, TRUE)"tcltk“工具包也是如此。它使用了相当多的Greg建议可以做的事情。
发布于 2013-11-19 18:21:52
这个话题可能已经结束了,但作为gwidgets的新手,我遇到过这样的问题。jverzani给出的解决方案显然是一种解决方案。我选择了另一个,没有使用任何补充对话框,只是因为我不想要一个,没有任何其他原因...
在gwindow的处理程序中,在处理之后,我从环境中删除了变量:
handler = function(h,...) {dispose(EDFAnalysis$w); rm(w,envir=EDFAnalysis)}
其中EDFAnalysis是我的脚本的环境...w是主窗口。
然后,我在脚本的末尾添加了:
while(exists("w",EDFAnalysis)){Sys.sleep(5)}
当然,可以使用小于5或大于5的值。在我的例子中,5秒就足够了,而且不是永远的...:-)
发布于 2011-10-24 22:06:48
处理此问题的标准方法是请求用户输入以继续。这一行代码可以解决这个问题。
编辑:readline只有在交互使用的情况下才能工作,所以我把它换成了scan,后者不太美观。
pause_for_input <- function()
{
message("Press ENTER to continue")
invisible(scan(n = 0, quiet = TRUE))
}所以你的脚本应该看起来像这样
#Create you GUI
#Whatever else
pause_for_input()https://stackoverflow.com/questions/7869123
复制相似问题