mclistbox

Tcl/TKコアにはマルチカラムのリストボックスのWidgetがありません。
意外とBWidgetなどのMegaWidgetにもないので、困ったときは、
TkTableかBryan Oakleyさん作成のmclistboxを使うことになります。
かなり古くからあるので、完成度も高くTcl/TK 8.0以上で動作するようです。
100% Pure Tclで記述されているので、マルチプラットフォームで動作します。

インストール

インストールは簡単です。 mclistbox-1.02.zipまたはmclistbox-1.02.tar.gzを解凍し、
mclistbox-1.02のフォルダをTcl/libフォルダにコピーし、pkgIndex.tclを作成します。

# pkgIndex.tcl
package ifneeded mclistbox 1.02 \
    [list tclPkgSetup $dir mclistbox 1.02 {{mclistbox.tcl source ::mclistbox::mclistbox}}]

使い方

使い方はリストボックスに似ていて簡単です。

mclistbox
package require mclistbox
namespace import mclistbox::*

frame .container -bd 2 -relief sunken
scrollbar .vsb -orient vertical -command [list .listbox yview]
scrollbar .hsb -orient horizontal -command [list .listbox xview]

mclistbox .listbox -labelanchor w -width 60 -height 5 \
    -fillcolumn address \
    -xscrollcommand [list .hsb set] \
    -yscrollcommand [list .vsb set]
.listbox column add name -label "名前"     -width 16
.listbox column add phone -label "電話番号"     -width 14
.listbox column add address  -label "住所" -width 30

grid .vsb -in .container -row 0 -column 1 -sticky ns
grid .hsb -in .container -row 1 -column 0 -sticky ew
grid .listbox -in .container -row 0 -column 0 -sticky nsew
grid columnconfigure .container 0 -weight 1
grid columnconfigure .container 1 -weight 0
grid rowconfigure    .container 0 -weight 1
grid rowconfigure    .container 1 -weight 0
pack .container -side top -fill both -expand y

# 項目を挿入する
.listbox insert end {太郎 03-1234-5678 東京都調布市1-2-3}
.listbox insert end {花子 044-1234-5678 神奈川県川崎市1-2-3}
.listbox insert end {一郎 070-1234-5678 埼玉県おおみや市1-2-3}

# 名前でソートする
.listbox label bind name  "sort %W name"

proc sort {w id} {
    set data [$w get 0 end]
    set index [lsearch -exact [$w column names] $id]
    set result [lsort -index $index $data]
    $w delete 0 end
    # ... and add our sorted data in
    eval $w insert end $result
}

# 最初の項目を選択する
.listbox selection set 0

サンプル

以下は、mclistboxに添付されているフォント選択のサンプルスクリプト(example.tcl)です。
Name, Size Last Modifiedの項目でソートできます。

example.tcl

マニュアル