我正在尝试使用该tcltk
包为 R 创建一个脚本小部件。但我不知道如何创建一个停止按钮来中断来自小部件的脚本。基本上,我想要一个按钮、一个菜单选项和/或一个键绑定来中断当前脚本的执行,但我不知道如何让它工作。
一种(非理想)策略是仅使用 RGui STOP 按钮(或<ESC>
控制台<Ctrl-c>
上的或),但这似乎会导致 tk 小部件永久挂起。
这是基于 tcl/tk 示例 ( http://bioinf.wehi.edu.au/~wettenhall/RTclTkExamples/evalRcode.html ) 的小部件的最小示例:
require(tcltk)
tkscript <- function() {
tt <- tktoplevel()
txt <- tktext(tt, height=10)
tkpack(txt)
run <- function() {
code <- tclvalue(tkget(txt,"0.0","end"))
e <- try(parse(text=code))
if (inherits(e, "try-error")) {
tkmessageBox(message="Syntax error", icon="error")
return()
}
print(eval(e))
}
tkbind(txt,"<Control-r>",run)
}
tkscript()
在脚本小部件中,如果您尝试执行Sys.sleep(20)
然后从控制台中断,小部件会挂起。如果一个人要运行同样的事情,例如,一个无限循环,比如while(TRUE) 2+2
.
我认为我遇到的可能与此处报告的错误类似:https ://bugs.r-project.org/bugzilla3/show_bug.cgi?id=14730
另外,我应该提到我在 Windows (x64) 上的 R 3.0.0 上运行它,所以问题可能是特定于平台的。
关于如何中断正在运行的脚本而不导致小部件挂起的任何想法?