ハイアラキカルリスト (1)
 Tixのハイアラキカルリストは、 ツリー状の階層構造を表現できるリストボックスのようなウィジェットです。 それだけではなく、横に幾つかの付属的な列をつけることも可能で、 表形式のデータの表現に重宝します。 ここでは、ハイアラキカルリストのそれぞれ別の側面を抜き出した5つのサンプルを順にご紹介していくことにします。 まずは下のようなドキュメントのファイリングを行うツールらしきもののサンプルを載せてみます。
package require Tix
wm title . "Document Folder I"

set fa [frame .fa]
set ha [tixHList $fa.ha -bg #c0c0c0 -rel groove \
  -highlightcolor white -selectbackground #600040 -selectforeground white \
  -width 40 -height 10 -separator . -yscrollcommand "$fa.scrv set"]
set scrv [scrollbar $fa.scrv -ori v -command "$fa.ha yview"]
foreach e {ha scrv} {pack $fa.$e -side left -fill y}

# ここからエントリをセットしていきます。
$ha add kikaku -text 企画資料
$ha add kikaku.haru -text 春の企画
$ha add kikaku.natsu -text 夏の企画
$ha add kikaku.aki -text 秋の企画
$ha add kikaku.fuyu -text 冬の企画
$ha add seihin -text 製品情報
$ha add seihin.marux -text まるこげX
$ha add seihin.maruy -text まるこげY
$ha add juchu  -text 受注実績
foreach e {A1 A2 A3} { $ha add juchu.$e -text $e }

button .cmda -text 終了 -command exit
pack $fa .cmda -side top -anc e
# end.

スクリーンショット

 最初のサンプルは最も簡単なそれです。 ハイアラキカルリストはtixHListコマンドで作ることができます。 スクロール機能をもつtixScrolledHList というウィジェットもありますが、 こちらはtixHListに備わりこれからぜひともご紹介したい大事な機能のひとつを欠いています。 したがってここでは扱わず、 別のウィジェットのサンプルで脇役として登場することになろうかと思います。

tixHList $fa.ha -bg #c0c0c0 -rel groove \
  -highlightcolor white -selectbackground #600040 -selectforeground white \
  -width 40 -height 10 -separator . -yscrollcommand "$fa.scrv set"

 で、tixHListのオプションのうち、 色や外見に関するそれらはほとんどTkのリストボックスのそれらと共通なので、 あえて触れる必要はないでしょう。 -widthと-heightは文字数で指定するのに注意が必要です。 特有のオプションはなんといっても -separatorです。 ハイアラキカルリストの各項目はファイルシステムのパスのように階層的な 「名前」で表現するのですが、 その階層を表す文字列がセパレータです。 デフォルトのセパレータは . (ピリオド)です。

$ha add kikaku -text 企画資料
$ha add kikaku.haru  -text 春の企画
$ha add kikaku.natsu -text 夏の企画
$ha add kikaku.aki   -text 秋の企画
$ha add kikaku.fuyu  -text 冬の企画
項目を追加するには、addサブコマンドを使います。 その最初の引数が各項目を一意に識別し、階層構造の中での位置関係も表現する 「名前」です。 addサブコマンドで-itemtypeオプションを指定することができ、 これにimageやimagetextを指定すると画像データを項目として貼り付けることも可能です (ここでは何も指定していないのでデフォルトの-itemtype text が指定されているように扱われています)。 ちなみにディレクトリ構造との違いとして、 階層構造の始祖はひとつである必要はありません。 極端な話、aaa , bbb, ccc, ddd …のように、 階層構造をもたない名前ばかりにしてもかまいません。 上の例では、「企画資料」「製品情報」「受注実績」 という3つの項目が最上位階層に並ぶ構造をとっています。
また、階層構造にはするけど左側の親子関係を表す線を隠したい場合には、 tixHListのオプション-drawbranchで0を指定すればOKです。


 今度のサンプルでは、ツリー状の項目の右に、 付属的な項目を表示する欄をつけてみます。


package require Tix
wm title . "Document Folder II"

set fa [frame .fa]
set ha [tixHList $fa.ha -bg #c0c0c0 -rel groove \
  -highlightcolor white -selectbackground #600040 -selectforeground white \
  -width 40 -height 10 -separator . -yscrollcommand "$fa.scrv set" \
  -header 1 -columns 3]
set scrv [scrollbar $fa.scrv -ori v -command "$fa.ha yview"]
foreach e {ha scrv} {pack $fa.$e -side left -fill y}

# ヘッダ
$ha header create 0 -text {}
$ha header create 1 -text 作成日
$ha header create 2 -text 担当者

$ha col width 0 -char 15
$ha col width 1 -char 18

# ここからエントリをセットしていきます。
$ha add kikaku -text 企画資料
set s { {haru  春の企画 2001/02/11 山田}
        {natsu 夏の企画 2001/04/28 北浦}
        {aki   秋の企画 2001/07/20 北浦}
        {fuyu  冬の企画 2001/10/10 山田} }
foreach e $s {
    set ename kikaku.[lindex $e 0]
    $ha add $ename -text [lindex $e 1]
    $ha item create $ename 1 -text [lindex $e 2]
    $ha item create $ename 2 -text [lindex $e 3]
}
$ha add seihin -text 製品情報
set s { {marux まるこげX 2000/09/23 坂本}
        {maruy まるこげY 2000/11/03 加藤} }
foreach e $s {
    set ename seihin.[lindex $e 0]
    $ha add $ename -text [lindex $e 1]
    $ha item create $ename 1 -text [lindex $e 2]
    $ha item create $ename 2 -text [lindex $e 3]
}
$ha add juchu  -text 受注実績
foreach e {A1 A2 A3} {
    set ename [$ha add juchu.$e -text $e]
    $ha item create $ename 1 -text 秘密じゃ
}

button .cmda -text 終了 -command exit
pack $fa .cmda -side top -anc e
# end.

スクリーンショット

 このような形状にするには、tixHListのオプション -columnsで表示したい列の数を指定します。 また、ウィジェットの上辺に見出しヘッダ行を表示したい場合には、 -header 1もつけておきます。

tixHList $fa.ha -bg #c0c0c0 -rel groove \
  -highlightcolor white -selectbackground #600040 -selectforeground white \
  -width 40 -height 10 -separator . -yscrollcommand "$fa.scrv set" \
  -header 1 -columns 3

このオプションのほとんどは一度作ったあとにも、 configureサブコマンドで再設定が可能ですが、 -columnsだけは例外です。 列の数は、最初にウィジェットを作るときだけ設定でき、 後で変更することはできません。

  $fa.ha configure -selectbackground #000060
  # $fa.ha configure -columns 4 ←エラーになります
 次に各列の幅と見出しタイトルを設定しましょう。 見出しタイトルはheader createさぶさぶコマンドで、 列の幅はcolumn widthさぶさぶコマンドの -charオプションで指定します。

$ha header create 1 -itemtype text -text 作成日
$ha header create 2 -itemtype text -text 担当者
$ha col width 0 -char 15
$ha col width 1 -char 18
これらのコマンドの最初の引数は列のインデックスで、 左から順に0、1、2…となります。 この例では0に見出しタイトルをつけていませんが、 この場合は何も表示されないだけでエラーにはなりません。 しかし、-columnsオプションで指定した範囲を越えるインデックスを指定すると、 エラーになってしまいます。 -columnsは正確に指定しないといけません。

 最後に実際にデータをセットするには、

  1. 行を作る。
  2. 列に値をセットする。
の2段階を踏む必要があります。 前者は既に出てきたaddサブコマンドで、 後者はitem createさぶさぶコマンドで行います。

$ha add .kikaku.natsu -itemtype text -text 夏の企画
$ha item create .kikaku.natsu 1 -itemtype text -text 2001/04/28
$ha item create .kikaku.natsu 2 -itemtype text -text 北浦
item createの最初の引数はエントリの名前、二番目はカラムの位置 (先頭が0ですが、ここには階層構造のツリーの名前、 上の例では「夏の企画」が入っているので、実質上1からとなります) です。 一度セットした値を後で変更するには、 item configureを使います。
$ha item configure .kikaku.natsu 0 -text 魅惑の盆踊り
$ha item configure .kikaku.natsu 1 -text 2001/05/04
$ha item configure .kikaku.natsu 2 -text 手賀沼

拡張レビュー分室 top
(first uploaded 2001/04/13 last updated 2002/02/11, MISUMI URANO)