ふにょい日記

ふにょ・い 2 (形)[文]ク ふにょ・し 思い通りにならない為力が入らなくなる様。[派生] ――げ(形動)――さ(名)

R言語でのGUIプログラミング

2008-12-12 08:13:56 | プログラミング・コンピューター
R言語でのGUIプログラミングには、tcltkパッケージを使う。

Tcl/Tk のそのままだが、R言語の為に少し違っている。
  • コマンド名の頭に"tcl"、"tk"、"ttk"が付く。
  • 引数の"-xxxx ..." は "xxxx=..." になる
  • 処理以外の "{...}" は 文字列になる
  • 処理の所には関数を渡す
  • 引数に指定しているキーワードは文字列になる
  • "ウィジット コマンド 引数..." は "tkコマンド(ウィジット, 引数...)" になる
  • tcktkの関数の戻り値は Tcl の値になっているので、R言語の関数で使う場合には、tclvalue() や as.~() で R言語の値に変換しなければならない
  • 一部の機能は tcl() 関数を使って、「tcl("image", "width", someimg)」(someimg イメージの幅の取得) のようにする
  • 等...


(おぼろげな記憶を元に作った間違ってるかも知れないプログラミング例)
library(tcltk)

# set types {
#     { "Text" 	{.txt}	}
# }
# set textfilename [tk_getOpenFile -filetypes $types -title テキストファイルを開く]
textfilename <- tkgetOpenFile(filetypes="{{Text} {.txt}}", title="テキストファイルを開く")
# toplevel .tt tt <- tktoplevel()
# wm title .tt "テキストファイルビューワ" tkwm.title(tt, "テキストファイルビューワ") # text .tt.text -width 80 -height 25 tttext <- tktext(tt, width=80, height=25)
# button .tt.button -text 閉じる -command exit ttbutton <- tkbutton(tt, text="閉じる", command=function(){ tkdestroy(tt) })
# pack .tt.text .tt.button tkpack(tttext, ttbutton) # textfilename には Tcl の値が入っているので R 言語の値に変換しなければならない lines <- readLines(tclvalue(textfilename))
for (l in lines) tkinsert(tttext, "end", paste(l, "\n")) # .tt.text insert end $l # .tt.text configure -state disable tkconfigure(tttext, state="disable") # バッチモードで GUI を使うときは、次のようにしないと即時終了してしまう tkwait.window(tt)


※ちなみに、R言語も Tcl/Tk も昨日初めて触ったばかりなので大幅におかしいかも知れません。
※2008/12/13 16:35 頃に少し直しました
※2008/12/13 17:27 頃に動作確認をして少し直しました