[[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'
 }

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS