More Related Content
More from Masahiro Hayashi
More from Masahiro Hayashi (6)
RGtk2入門
- 4. Rで使えるGUIツールキット
tcltk
組み込みパッケージ
手軽だが低機能
rJava
Rからjavaを使うためのパッケージ
javaの知識が必要
RGtk2
高機能
基本的にはRの知識だけで大丈夫
- 5. GTK+とは?
GTK+ (The GIMP Toolkit) はGIMPの実装のため
に開発されたGUIツールキットで、Gimp Tool Kitの
略である。オープンソースのGUIツールキットの中での
品質の良さに注目され、GNOMEデスクトップ環境のツー
ルキットとして採用される。(Wikipediaより)
RGtk2はGTK+2をR上で使うためのパッケージ
- 8. Hello, world!
lab <- gtkLabelNew("Hello, world!")
win <- gtkWindowNew()
gtkWindowSetTitle(win, "Test")
gtkContainerAdd(win, lab)
- 9. Widgetのクラス
lab <- gtkLabelNew("Hello, world!")
win <- gtkWindowNew()
gtkWindowSetTitle(win, "Test")
gtkContainerAdd(win, lab)
下線がクラス,斜体がメソッド
クラスの継承あり
GtkWindowはGtkContainerの下位クラス
- 10. GtkWindowクラスの階層
GObject
GInitiallyUnowned
• GtkObject
• GtkWidget
• GtkContainer
• GtkBin
• GtkWindow
探している機能が,上位のクラスのメソッドな場
合がある
- 13. Hello, World! 2
win <- gtkWindowNew()
btn <- gtkButtonNew()
win$setDefaultSize(50, 50)
btn$setLabel("OK")
win$add(btn)
gSignalConnect(btn,"clicked",
quote(cat("Hello, world!")))
ボタンを押すと”Hello, World!”がコンソールに表示さ
れる
- 15. シグナル(signal)
GTK+のリファレンスマニュアルより
イベントが起こるとシグナルが発せられる
シグナルと処理が結び付けられていた場合,処理を実行する
コールバック関数(イベントが起きたときに実行される処理)に
渡される引数が重要
この場合,シグナルを発したオブジェクト(gtkButton)と任意のデータ
- 16. コールバック関数の作り方
onClicked <- function(obj, data){
sprintf("Button[%s] is %s",
obj$getLabel(), data)
}
gSignalConnect(btn,"clicked",
onClicked, data="is clicked!")
第4引数(data)は任意のデータ
引数としてlistを渡せば,コールバック関数に好きな
だけデータを渡せる
- 17. 実例:グラフィックスパラメータを変更する
アプリケーション
parが覚えきれない
ウィンドウ
パラメータ名 値
こんなGUIがあれば便利かも
parBox(“パラメータ名”)で,Windowの内部に配置す
るWidgetを返す関数を作る
- 18. Widgetの作成
parBox <- function(par){ #ここから関数定義
label <- gtkLabelNew(par)
entry <- gtkEntryNew()
hbox <- gtkHBoxNew()
hbox$packStart(label)
hbox$packStart(entry)
# 引数parは,グラフィックスパラメータ名
# まず,必要な部品(widget)を用意する
- 19. グラフィックスパラメータの処理
val <- par()[[par]] # グラフィックスパラメータの値取得
if (is.character(val)) # 値が文字列かどうかで分岐
val <- paste("¥"", val, "¥"" , sep="", collapse=",")
else
val <- paste(as.character(val), sep="", collapse=",")
entry$setText(val) # 値をgtkEntryにセット
gSignalConnect(entry, "activate", onEntryActivated, par)
# entry内でエンターを押したときの処理
return(hbox)
} # 関数定義終わり
- 20. コールバック関数
onEntryActivated <- function(obj, label){
text <- obj$getText()
text <- iconv(text, "UTF-8",
localeToCharset()[1])
# widget内で文字列はUTF-8なので,
# ロケールを取得してエンコード変換
text <- sprintf("par(%s=c(%s))", label, text)
print(text)
eval(parse(text=text))
}
- 22. 全グラフィックスパラメータ一覧&変更
parGUI <- function(){
par.names <- names(par())
hboxes <- lapply(par.names, parBox)
vbox <- gtkVBoxNew()
lapply(hboxes, vbox$packStart)
sw <- gtkScrolledWindowNew()
sw$addWithViewport(vbox)
win <- gtkWindowNew(show=FALSE)
win$add(sw)
win$showAll()
}
- 24. レイアウト用Widgetの種類(1)
win <- gtkWindowNew(show=FALSE)
note <- gtkNotebookNew() # タブインターフェース
paned <- gtkVPanedNew() # 二分割レイアウト
hbox <- gtkHBoxNew() # widgetを横に詰め込む
vbox <- gtkVBoxNew() # widgetを縦に詰め込む
label <- gtkLabelNew("Label")
entry <- gtkEntryNew()
entry$setText("Entry")
btn1 <- gtkButtonNewWithLabel("Button1")
btn2 <- gtkButtonNewWithLabel("Button2")
- 27. 参考になるもの(1)
RGtk2のチュートリアルはlibrary内のPDF
ビニエットにはなっていない
クラスのヘルプは未完成だが有用
?GtkButton などとすると,クラスのヘルプが見られる
クラスのヘルプにはそのクラスのメソッド一覧,ヒエラルキー,
簡単なexampleがなどある
最後尾に本家GTK+のリファレンスマニュアルへのリンク
• signalとpropertyは本家でもRGtk2でも同じなので,とても有用
- 28. 参考になるもの(2)
本家のwidget一覧
http://library.gnome.org/devel/gtk/unstable/ch02.html
Ruby/GTK2 チュートリアル
http://ruby-gnome2.sourceforge.jp/ja/hiki.cgi?gtk2-tut
Ruby,Python,PHPのGTK+のサンプル・文書は,これら
の言語を知らなくても役に立つ
RGtk2の資料は皆無に等しいので,他言語でのノウハウを流用
慣れてきたら,RGtk2DfEdit(RGtk2を使ったパッケージ)の
ソースを読むとよい