ボタンウィジェットではそのラベル表示として,-text オプションでテキストを,-image
オプションでイメージを指定することができます.しかし,-text と -image は両方同時には指定できません(-image
が優先されるようです).
それでは,Netscape の「戻る」のようなアイコン付テキストのボタンを作るには,どうすればいいのでしょうか.
Buttonの上に,Labelとしてイメージとテキストをpackすれば言いように見えますが,これではLabelのbindが優先してしまうため,ボタンを押せなくなってしまいます.
こんな時には,Compoundというコマンドを使います.Compoundはテキスト,ビットマップ,イメージなどを組み合わせてimage型のオブジェクトを生成するものです.
テキスト,ビットマップ,画像など違う形式のオブジェクトを一つの画像イメージとして合成するコマンドです.
詳しいオプションは,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オプションで渡してやれば完成です.
他にも,アイコン付のラベルなども作ることができます.合成する形式が決まっていたら,サブルーチンを作って手間を削減するのが良い方法でしょう.