|
TixのグリッドはTkのgridコマンドとは何の関係もありません。
これは縦横に格子状に区切られたセルに文字や画像、
ウィジェットなどを入れることができるワークシート状のウィジェットです。
特筆すべきことは各セルの内容をインラインで編集できることで、
この機能を備えたワークシート(グリッドボックス)
をもつツールキットはオープンソースではまだまだ珍しいといえます。
さながらTcl/Tkの拡張らしく簡潔な記述で使うことができ、これで嬉しさ都合2倍。
さっそく使ってみましょう。
package require Tix
wm title . "Inventory I"
# tixGridの-formatcmdで指定するコールバックプロシージャ
proc CBFormat {w area x1 y1 x2 y2} {
case $area {
main {
$w format grid $x1 $y1 $x2 $y2 \
-bd 1 -bordercolor #606060 -relief raised \
-bg #c0c0c0 -fill 1
}
x-margin {
$w format grid $x1 $y1 $x2 $y2 \
-bd 1 -bordercolor #606060 -relief raised \
-bg #f0c0c0 -fill 1
}
y-margin {
$w format grid $x1 $y1 $x2 $y2 \
-bd 1 -bordercolor #606060 -relief raised \
-bg #c0c0f0 -fill 1
}
s-margin {
$w format grid $x1 $y1 $x2 $y2 \
-bd 1 -bordercolor #606060 -relief raised \
-bg #f0f0f0 -fill 1
}
}
}
# 各セルの色やスタイルは、オプション -formatcmd
# で指定したTclコマンドで行います (CBFormatを見てね)
set f [frame .f]
set g [tixGrid $f.g -width 8 -height 6 -format "CBFormat $f.g" \
-xscrollcommand "$f.scrh set" -yscrollcommand "$f.scrv set"]
set scrv [scrollbar $f.scrv -ori v -com "$g yview"]
set scrh [scrollbar $f.scrh -ori h -com "$g xview"]
grid $g -row 0 -column 0
grid $scrv -row 0 -column 1 -sticky ns
grid $scrh -row 1 -column 0 -sticky ew
# ここから列の幅を指定し、データを入れていきます。
$g size col 0 -size 16char
$g set 0 0 -itemtype text -text 品目
set RowTitles {
とりもも テンダーロイン ハンバーグ
さかなフライ コロッケ 冷錦糸卵 冷いんげん 冷ブロッコリー
}
set y 1
foreach e $RowTitles {
$g set 0 $y -itemtype text -text $e; incr y
}
set ColTitles { 10 11 12 13 14 15 16 17 18 }
set x 1
foreach e $ColTitles {
$g size col $x -size 4char
$g set $x 0 -itemtype text -text $e; incr x
}
set data {
{2 * * 2 * * 2 * *}
{1 3 * 2 * 1 3 * 2}
{1 * 4 * 1 3 * 2 1}
{* * * 2 * * * 3 *}
{1 * 1 * * * 1 * *}
{* 3 * * * 3 * * 2}
{* * 2 2 * * 2 2 *}
{* 1 1 * * 1 1 * 1}
}
set y 1
foreach e $data {
set x 1
foreach d $e {
$g set $x $y -itemtype text -text $d; incr x
}
incr y
}
button .b -text 終了 -command exit
pack $f .b -side top -anc e
# end.
|
グリッドはtixGridコマンドで作ることができます。
tixScrolledGridという、
スクロール機能を備えたグリッドの親分もありますが、
とりあえずtixGridのほうでいってまいりましょう。
こいつはスクロール機能がないので、
Tkのリストボックスなどと同じ要領で隣にスクロールバーをつけてやります。
set g [tixGrid $f.g -width 8 -height 6 -format "CBFormat $f.g" \
-xscrollcommand "$f.scrh set" -yscrollcommand "$f.scrv set"]
-widthと-heightは最大のセル数で指定します。
で、各セルの色やフォントなどを指定したい場合には、
-formatcmd
(-format)オプションでコールバックプロシージャを指定します。
これは、セルの描画が必要になったときに呼ばれるプロシージャで、
後ろに自動的に5つの引数がつけられます。
proc CBFormat {w area x1 y1 x2 y2} {
case $area {
main {
$w format grid $x1 $y1 $x2 $y2 \
-bd 1 -bordercolor #606060 -relief raised \
-bg #c0c0c0 -fill 1
}
# 略
}
}
(x1,y1)〜(x2,y2) が対象となるセルの範囲で、areaは次のように定義されます。
- x>0かつy>0のとき ... main
- x=0かつy=0のとき ... s-margin
- x=0かつy>0のとき ... y-margin
- x>0かつy=0のとき ... x-margin
formatサブコマンドはまだちゃんとマニュアルに解説されていませんが、
format gridさぶさぶコマンドとformat borderさぶさぶコマンドを持ちます。
format gridさぶさぶコマンドがセルの内部(セルの境界線から3ピクセル以上)、
format borderさぶさぶコマンドがセルの境界線から3ピクセル以内の描画体裁の指定に使われます。
オプションは上の感じでなんとなく分かると思うので、
いろいろ試してみてください。
ここでは左上隅のセル(areaがs-margin)なら白で、
上辺のセル(x-margin)なら赤で、左辺のセル(y-margin)なら青で、
それ以外ならダークな感じで塗るよう指定しています。
次に行の高さ、列の幅ですが、標準ではauto(必要最小限の大きさを自動的にとる)
となっています。これを指定するにはsizeサブコマンドを使います。
$g size col 0 -size 16char
-sizeの単位はピクセルなのに注意してください。文字数を指定したいときは
6charのように "char" をつけます。
この値のデフォルトが "auto" というわけです。
そしていよいよセルにデータを入れていくわけですが、
これはsetサブコマンドに行、列の順番で位置を指定して行います。
行、列とも最初が零です。
$g set 0 0 -itemtype text -text 品目
-itemtypeはtextのほかにimage、imagetext、windowがあります。
imageは画像を、
imagetextは画像とテキストを両方表示するものです。
-textは-itemtypeがtextのときに使えるオプションで、
-itemtypeがimageのときは代わりに-imageを、
windowのときは-windowを使うことになります。
なお後のページで出てきますが-itemtypeがimagetextの場合は
-textと-imageを両方指定すればOKです。
どんなオプションが指定できるのかは、
マニュアルのDisplay Itemsの項をご覧ください。
ところでグリッドをスクロールバーでスクロールさせてみると、
上辺、左辺のセルはスクロールせずにそのまま残ります。
このあたりの気が利いた制御は最初から行われるため、
我々にとってはとても使いやすくなっています。
(first uploaded 2001/04/13 last updated 2010/09/24, MISUMI URANO)
|