[[Ruby]]
#contents
Tcl/Tkなんて懐かしすぎるものだけど、こうやってちゃんと生きているのね。 ''Rubyとの組み合わせで「とりあえずGUIしたい」時にいろんな環境で動く'' のがいいわよね。
まずは、HelloWorldね。
あ、試した環境は最新の Ruby2.3.0(p0)、Ubuntu GNOME16.04LTS(amd64)よ。
* こんにちは世界 [#ib79bf47]
#ref(1.png)
#!/usr/bin/ruby -EUTF-8
require 'tk'
TkLabel.new{
text "こんにちは世界"
pack
}
Tk.mainloop
ふむふむ。
* ボタンを押してみよう [#mde83caf]
でも、このままじゃあ用途がほとんどないわよね。
うん、何かボタンを押して動作反映させてみましょう。
#!/usr/bin/ruby -EUTF-8
require 'tk'
ff = TkLabel.new{
text "a"
pack
}
TkButton.new{
text "こんにちは"
command {
print "Hello, World!\n"
ff.text = "だよ?"
}
pack
}
Tk.mainloop
#ref(2.png)
で、押したらこうなる。
#ref(3.png)
ここまでくると、なんとなく理解できたわね。つまり、
- ボタンやラベルみたいなGUI部品も、Rubyのオブジェクトとして扱う
-- 生成時に名前を定義すると、普通にプロパティなども代入できる
わけね。
* タイマー割り込みしてみよう [#f67af3ce]
あとは、時間割り込みできれば最低限の用途に使えるわよね。やってみましょう。
#!/usr/bin/ruby -EUTF-8
require 'tk'
def tNow
Time.now.strftime("%Y-%m-%d %H:%M:%S")
end
ff = TkLabel.new{
text = tNow
pack
}
TkButton.new{
text "こんにちは"
command {
print "Hello, World!\n"
ff.text = tNow
}
pack
}
TkTimer.start(100){
ff.text = tNow
}
Tk.mainloop
#ref(4.png)
待ち時間はミリ秒単位ってことかしら?
あとはボタンの配置とか、細かい制御かしら。
* ウインドウの制御は? [#h026e977]
これも大切よね。
でも、まさか geometry で設定するなんて。本当に tkなのねえ。
TkRoot.new{
title '時計'
geometry '320x200'
}