tcltk
パッケージを使用して R 用のスクリプト ウィジェットを作成しようとしています。しかし、ウィジェットからのスクリプトを中断するための STOP ボタンを作成する方法がわかりません。基本的に、現在のスクリプトの実行を中断するボタン、メニュー オプション、および/またはキー バインドが必要ですが、それを機能させる方法がわかりません。
1 つの (非理想的な) 戦略は、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 で実行していることに言及する必要があるため、問題はプラットフォーム固有のものである可能性があります。
ウィジェットをハングさせずに実行中のスクリプトを中断する方法について何か考えはありますか?