アイコン付テキストのボタン

ボタンウィジェットではそのラベル表示として,-text オプションでテキストを,-image オプションでイメージを指定することができます.しかし,-text と -image は両方同時には指定できません(-image が優先されるようです).

それでは,Netscape の「戻る」のようなアイコン付テキストのボタンを作るには,どうすればいいのでしょうか.

Buttonの上に,Labelとしてイメージとテキストをpackすれば言いように見えますが,これではLabelのbindが優先してしまうため,ボタンを押せなくなってしまいます.

こんな時には,Compoundというコマンドを使います.Compoundはテキスト,ビットマップ,イメージなどを組み合わせてimage型のオブジェクトを生成するものです.

■ Compound コマンド

テキスト,ビットマップ,画像など違う形式のオブジェクトを一つの画像イメージとして合成するコマンドです.

書式: Tk::Compound;
$image = $parent->Compound(?options?)
主なオプション:
-background, -borderwidth, -font, -padx, -pady, -reliefなど
イメージコマンド:

詳しいオプションは,Quick Reference のCompoundを参照してください.

■ 合成イメージを作ってみよう

まずは,Netscape風の「戻る」ボタンを作ってみましょう.用意するものは,矢印のアイコンファイル(ここでは,back.gifとします)です.

アイコン画像(back.gif):


#!/usr/bin/perl -w 
use Tk; 
use Tk::Compound;

$mw = MainWindow->new(); 
$mw->title('back'); 
# 
$img = $mw->Compound; 

$img->Image(-image => $mw->Photo(-file=>'back.gif')); 
$img->Line; 
$img->Text(-text => "戻る", 
           -padx => 5); 

$mw->Button(-image=>$img) 
         ->pack; 

MainLoop; 
#--- 
#button_compound.pl

Compundで合成イメージオブジェクト$img を定義します.その後,Image, Line, Textなどのイメージコマンドで$imgに合成して行きます.$img内のオブジェクトは,$img->Line が実行されない限り横に並べられて行きます.

最後に,ボタンに-imageオプションで渡してやれば完成です.

他にも,アイコン付のラベルなども作ることができます.合成する形式が決まっていたら,サブルーチンを作って手間を削減するのが良い方法でしょう.