首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何停止退出R gWidgets脚本

如何停止退出R gWidgets脚本
EN

Stack Overflow用户
提问于 2011-10-24 04:53:35
回答 6查看 1.3K关注 0票数 3

我正在使用gWidgets工具包在使用Rscript运行的R脚本中创建图形用户界面。

创建GUI后,脚本将退出。

我可以通过在脚本末尾执行一个while(TRUE){Sys.sleep(9999)}循环来防止这种情况发生,但这看起来有点老生常谈。

有没有更好的方法告诉R只在GUI关闭时退出,或者至少在GUI构造完成后进入REPL?

EN

回答 6

Stack Overflow用户

发布于 2011-10-25 09:51:34

你也许可以根据你的需要调整gbasicdialog。此构造函数创建一个模式容器,您可以从中派生其他窗口。下面是一个示例:

代码语言:javascript
复制
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建议可以做的事情。

票数 4
EN

Stack Overflow用户

发布于 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秒就足够了,而且不是永远的...:-)

票数 3
EN

Stack Overflow用户

发布于 2011-10-24 22:06:48

处理此问题的标准方法是请求用户输入以继续。这一行代码可以解决这个问题。

编辑:readline只有在交互使用的情况下才能工作,所以我把它换成了scan,后者不太美观。

代码语言:javascript
复制
pause_for_input <- function()
{
  message("Press ENTER to continue")
  invisible(scan(n = 0, quiet = TRUE))
}

所以你的脚本应该看起来像这样

代码语言:javascript
复制
#Create you GUI
#Whatever else
pause_for_input()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7869123

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档