PR

 前回は,LinuxにおけるGUIの基本的な仕組みと,Ruby/TKの導入を行いました。今回はRuby/TKを使ったGUIプログラミングを,より詳しく見ていきましょう。

Ruby/TKプログラミングの基本

 前回,ごく簡単なHello Worldプログラムを紹介しました。まずはそのプログラム(図1)を例に,Ruby/TKを使ったプログラミングの基本を説明しましょう。

require 'tk'

label = TkLabel.new
label.text("Hello, World!")
label.pack

Tk.mainloop
図1●rubytk01.rbの内容

 最初の行(require 'tk')は必須です。requireメソッドを使ってTKライブラリを読み込んでいます。TKライブラリはRubyに標準添付されていますが,明示的に読み込まないと利用することができません。

 最後の行(Tk.mainloop)も必須で,イベントループと呼ばれます。イベントとは「マウスクリック」や「キーボード入力」のような,GUI上で発生する様々な出来事です。発生したイベントをとらえてGUI部品に伝える役割を果たしているのが,イベントループです。

 これらの行の間にGUIプログラム本体を記述しますが,上で述べた最低限の2行だけからなるプログラム(図2)を実行するとどうなるでしょうか?

require 'tk'
Tk.mainloop
図2●roor.rbの内容
図3●ルートウィジェット
図3●ルートウィジェット

 図3のように,何もないウィンドウだけが表示されました。個々のGUI部品をウィジェットといいますが,このウィンドウは,GUIアプリケーションのベースとなるルートウィジェットといいます。ルートウィジェット上に様々なウィジェットを配置していくのがRuby/TKプログラミングの基本です。


ウィジェットって何?

 最初のプログラムに戻りましょう。GUIプログラムの本体部分は図4のようになっていました。

label = TkLabel.new
label.text("Hello, World!")
label.pack
図4●rubytk01.rbの内容の一部

 Ruby/TKでは,すべてのウィジェットはクラスとして定義されています。文字列を表示するラベルウィジェットはTkLabelクラスのオブジェクトです。newメソッドを実行することでインスタンス(実際のウィジェット)が作成されます(1行目のlabel = TkLabel.new)。

 ウィジェットは様々な属性(プロパティ)を持っています。ラベルウィジェットのtext属性に文字列を設定すると,そのウィジェット内に文字列が表示されます(2行目のlabel.text("Hello, World!"))。

 ここまでのコードだけを書いても,実際にはまだウィジェットは表示されません。packメソッドを実行することで,初めてルートウィジェット内にウィジェットが表示されます。packはウィジェットを配置する役割を持つメソッドで,ジオメトリマネージャと呼ばれます。

 ジオメトリマネージャには,pack以外にもgridやplaceがありますが,おそらくpackがもっともよく利用されます。ウィジェットを配置する座標やサイズを指定しなくても,適切に処理してくれるので便利なのです。