ウィジェットとジオメトリマネージャ

さて,Perl/Tkのウィジェットはどのようなものがあるのでしょうか?まずは,Ktermから

$ widget

とタイプしてみましょう.Perl/Tkのデモプログラムが起動されます(英語ですが...)ここでは,基本的ないくつかのウィジェットを実際に使ってみましょう.

ウィジェットの書式

ウィジェットの書式定義は基本的に次の形になります.


     $新規オブジェクト=$親オブジェクト->ウィジェット名(-オプション名=>オプション値,...)
                   -> ジオメトリマネージャ名(-オプション名=>オプション値,...)

例を挙げてみましょう.先ほどのプログラムで,

    $mw->Button(-text => "ハロー",
                -command => \&print_hello)
            ->pack();

という個所がありました.これはボタン(Button)を定義しています.親オブジェクトはメインウィンドウである$mw,オプションは-text, -command,ジオメトリマネジャはpackになっています.

なお,この新しいボタンウィジェットは,以後のプログラム中で特に参照されないので,新規オブジェクト名は省略しています(上の書式左辺).ウィジェット名は大文字で始まっていることに注意してください.

Buttonウィジェットのオプション,-textはボタンに付けるラベル文字列を,-commandはボタンが押されたときに呼び出す関数へのリファレンスを指定します.

packジオメトリマネジャについては後回しにして,もう一つの例を挙げてみましょう.

    $mw->Label(-text => "初めてのPerl/Tkプログラム",
               -foreground => 'red')
           ->pack();

これは何のウィジェット定義でしょうか?答えはラベル(Label)です.オプションは...なんとなく想像がつきますね.

ジオメトリマネージャ

ウィジェットは通常ルートウィンドウなどの親オブジェクトの上に配置します.しかし,単にウィジェットを定義するだけではだめで,親オブジェクトの上にどのように配置するかを決める必要があります.この役割を果たすのがジオメトリマネージャです.

Tkには次の4種類のジオメトリマネージャが存在します.とりあえず,Introductionではpackのみを覚えましょう.他のジオメトリマネージャに関する詳細は次の章Basicsで説明します.

メソッド名 直感的な説明
pack ウィジェットの大きさにあわせて下のウィンドウの大きさを自動調節(パック)する
grid -row, -columnオプションでウィジェットを格子状に配置する
place ウィンドウ上の座標を指定して配置する
form pack+place.ウィンドウを格子上に区切り,格子点へのplaceを行う