Tcl/Tk 8.4後半の新機能

 バージョン8.4以降の新機能のうち、面白そうなものです。 (この他にも細かい機能拡張がたくさんあります)
 バージョン8.4以降は書籍の出版や雑誌等で扱われる頻度が激減していることもあり、 追加された新機能もなんとなーく影が薄いもの。 そこで可哀想な機能どもを少しだけこのページでご紹介します。


spinbox

スクリーンショット

spinbox .spia -from 1 -to 10 -textvariable v
pack [.spia configure -state readonly]
set v 5; pack .spia

spinbox(スピンボックス)ウィジェットは、 Tcl/Tk 8.4で追加された3ウィジェットの中でも早くから登場していたので、 まだポピュラーなものです。 scaleと同様、連続する値域の中から1つの値を選択するウィジェットです。 選択できる値の範囲は-fromと-toで指定します。 -stateオプションはnormal、readonly、disabledの3つがあり、デフォルトはnormalです。 normalの場合は右側の矢印をクリックして値を増減できるほか、 テキスト部分を直接編集しても値を変更することができます。 readonlyだと矢印クリックだけが可能でテキスト編集は不可能、 disabledはその、なんだ、いわゆるディセーブリャな状態です。


labelframe

スクリーンショット

set fa [labelframe .fa -bd 2 -rel groove -text タイトル -labelanchor ne ]
label $fa.lab1 -text 選択して下さい。
button $fa.b1 -text ボタン1
button $fa.b2 -text ボタン2
button $fa.b3 -text ボタン3
foreach e {lab1 b1 b2 b3} { pack $fa.$e -side top -padx 2 -pady 2 -anc w }
pack $fa

ラベルとフレームがどれほど仲良しか、皆さんはまだ知らない… (私も知りません)
すごい奴らが手を組んだッ!!(なんじゃ、そりは)
さておき、ラベルとフレームが手を組んだlabelframeウィジェットですが、 他のGUIツールキットでは結構メジャーなもので、Tk利用者としては待望といえましょう。 frameと同様の枠線の一部に、見出しラベルを表示できるものです。 見出しは-textオプションで指定できるほか、 -labelwidgetオプションで、任意のlabelウィジェットを指定できます。 -borderwidth(-bd)や-reliefなど、frameウィジェットで使えるオプションのほとんどは labelframeでも全く同じ意味で使うことが出来ます。 独特なオプション-labelanchorは、 フレーム上のラベルを置く位置を東南西北をeswnの記号で表し最大2つまで組み合わせることができます。 デフォルトはnw(北西、つまり左上の意)です。


panedwindow

スクリーンショット

set pa [panedwindow .pa -orient horizontal]

set f1 [frame .f1 -bd 3 -rel groove]
listbox $f1.lsta
$f1.lsta insert end "Item A"
$f1.lsta insert end "Item B"
$f1.lsta insert end "Item C"
pack $f1.lsta

set f2 [frame .f2 -bd 3 -rel groove]
message $f2.msga -text {テスト中です。} -width 150
pack $f2.msga

$pa add $f1; $pa add $f2
pack $pa

ペインとは何か?小泉内閣が国民に与えているものか?(おやじギャグ) といぶかしいですが、 よくマイクロソフトのアウトルックのような形状をしたメーラー(MUA)を 「3ペイン型」と呼ぶあれと同じで、 ウィンドウを複数の窓枠に分割したひとつずつがペインです。 フレームとの違いは、ペインの境界線となる枠をマウスで引っ張ることによって、 各ペインの幅を広げたり、狭めたり (あるペインの幅を広げることは他のペインを狭くすることですから同じ意味なんですけど) することができるところです。
そのpanedwindowウィジェットですが、ペインの並び方を -orientで指定します。horizontal(横に並ぶ)、vertical(縦に並ぶ)から選べます。 ウィジェットを作ったら、 そのaddウィジェットコマンドで左(上)から順番に各ペインにあたる子ウィジェット (典型的にはframeウィジェット)を載せていきます。 forgetウィジェットコマンドで削ることもできます。 で、その各ペインに当たる子ウィジェットは、 必ずしもpanedwindowウィジェットの子でなくてもよいようです。


-compoundオプション

 button、label、menuitemの各ウィジェットに、-compoundオプションが登場しました。 これは今までこれらのウィジェットには -textでラベル文字列か、-imageで画像か、どちらかしか表示できなかったのですが、 一緒に表示することができるようにしたものです。 文字列と画像がどれほど仲良しか、皆さんはまだ知らない…(まだ言ってる)

スクリーンショット

スクリーンショット

(晴れない晴れない)

image create photo Image1 -file fine.gif
button .b -text "晴れる" -image Image1 -compound right -font {Helvetica 10 normal}
pack .b -ipadx 5

文字列と画像を一緒に表示したいウィジェットには、今まで通り、 -textで文字列を、-imageで画像を指定します。 そして、-compoundの次の文字列が、Compound(混合の)表示方法を指定します。 それはnone,top,bottom,left,right,centerから選びます。 noneがデフォルトで、-textと-imageが両方指定されたら、画像のみを表示します。 top以降の5つは、 文字列から見て画像をどの位置に置くかという意味です。 上のスクリーンショットはそれぞれright、bottomを指定した例です。 最後のcenterというのは、あー、その、まあ、試して頂くとわかると思います。 概ね予想通りだと思いますので…

やねうらの top
(first uploaded 2004/03/17 last updated 2004/12/13, MISUMI URANO)