|
BLTはベル研で開発され、ルーセント・テクノロジー社にコピーライトされ、 長い間tcltk.comで一次配布されていたTkに対する拡張ライブラリセットです。 Tkの純粋な機能拡張として古くからとても有名なプログラムです。 BLTが何を意味するのかはマニュアルを読んでも 「好きなように解釈してチョ」としか書いてないので、 「Beautiful Lady and Television」の略だと言い張っても間違いではありません。 BLTの現在の版は2.4z (2002/10/15) で、 こちらからダウンロードできます。 Tcl/Tkのバージョン7.5、7.6、8.0以降の各バージョンに対応しています。 2.4pからはスタブ機構に対応したため、 8.2用のBLTは8.3以降でも使うことができます。 反面、バージョン7台のサポートはそろそろ失われつつあるようです。
●インストールしよう、UNIX編
(*1) 名前はOSやBLTのバージョンによって細かく違うことがありますが、 ここではこれで通します。 LinuxにBLT 2.4qをインストールしたときにはこんな名前になります。
●インストールしよう、MS-Windows編 (*2)そうでないやり方に精通されている方はもちろん、 それ以外の場所におくことも可能ですが、それはまた別の話。
●BLT機能を使えるようにするには
●折れ線グラフを描く ソースプログラムです。
まず、X軸とY軸のためのデータを用意します。 基本的には、両軸とも数値軸です。 支店対売上高とか、教科対得点のように片軸(支店、教科)が数値でない場合の方法は、 棒グラフの項にもっていきました。 さて数値データは下のようにそれぞれ数値からなる2つのリストを用意してもよいですが、 BLTで拡張されたデータ構造のベクトル(vector)を使うこともできます。 ここででっちあげたデータは「気温(セシ)」対「不快度(%)」です。 これは私が聞いて回った結果なので間違いありません(大騙)。 40度から45度になって不快度が減っていますが、これは 「その間に悟りの境地に達するはずなので、火もまた涼し」 とよくわからん発言をしたあげく不快度を下げた人が約1名いるためです。
set tenpura {5 10 15 20 25 30 35 40 45}
set fukaido {81.2 72.5 43.4 5.6 18.2 60.9 98.2 99.9 99.8}
次にグラフを作ります。グラフは、独立したTk部品として管理されるので、
「.g」のような名前をつけ、通常のTk部品と同じようにpackできます。
graph .g -plotbackground black pack .g .g configure -title "Fukaido Graph"次にこの部品.gと数値データをくっつけます。 これは「.g element create」コマンドで行います。 これでデータ系列が折れ線として表示されます。 この折れ線に関する設定は「.g element configure」コマンドで下のように行います。 ここではこの折れ線を凡例に表示するときに使う文字列(-label)、 データ点の形状(-symbol)、線の色(-color)、破線の形状(-dashes)、 線の幅(-linewidth)を指定していますが、これはまだ序の口、 こんなオプションがマニュアルにはたくさん載っています。 折れ線に関する設定が「.g element configure」 でできたのと同様、座標軸に関する設定は「.g axis configure」 コマンドで行えます。
.g element create line1 -xdata $tenpura -ydata $fukaido
.g element configure line1 -label {1999.7 survey} \
-symbol square -color red -dashes {2 4 2} -linewidth 2
.g element show
.g axis configure x -title {Temperature}
.g axis configure y -title {Uncomfortability}
そのaxis configureで使えるオプションの中に、
-minと-maxという面白いオプションがあります。
これを指定すると、グラフにズームイン・ズームアウトすることができます。
# マウス操作で拡大、縮小
bind .g <ButtonPress-1> {
%W axis configure x -min [%W axis invtransform x %x]
%W axis configure y -min [%W axis invtransform y %y]
}
# もとにもどすしか
bind .g <ButtonPress-3> {
%W axis configure x -min {}
%W axis configure y -min {}
}
ここまでで、大体グラフとしての体裁は完成したはずです。
あとは細かい表示の設定だけなので、省略してもOKです。
凡例の設定は「.g legend configure」 コマンドで行います。フォントや色などが設定できます。 .g legend configure -position right -relief groove -font fixed -fg blueクロスヘアというのは、 グラフの上をマウスが走るとそれについて動く交差線のことです。 こいつも破線にしたり、色を変えたりできます。
.g crosshairs configure -hide no -color red -dashes {2 2} -linewidth 2
Blt_Crosshairs .g
最後にグラフの方眼は「.g grid configure」で設定します。
.g grid configure -hide no -dashes { 2 2 }
できばえはこんな感じです。
●ハイアラキカルリストボックス
ああ、いかないで〜(だからどっちやねん)
hierbox .h -yscrollcommand {.scrv set} -height 200
scrollbar .scrv -orient vertical -command {.h yview}
hierboxの操作方法はinsert、delete、curselection、getなど、
多くがlistboxを模したものになっているので、
すぐに覚えられるはずです。
ハイアラキカルリストボックスの最大の特徴の階層づけされた項目をつくるには、 まずconfigureサブコマンドの -separatorオプションで1つのリストに共通のセパレータを定義します。 そして、セパレータで始まり、セパレータで区切られた単位が1つずつリストの項目として適当な位置に追加されます。
.h configure -separator {::}
foreach a {::java ::java::awt ::java::io ::java::net ::java::awt::event} {
.h insert end $a
}
この例では、たとえば「::java::awt」という名前自体が、
ルートの直下にある
「java」という項目の下に「awt」という項目がくるということを表しているので、
「.h insert end $a」で追加しようとすると、
「java」の下に並んでいる項目の一番最後に「awt」
という項目が追加されることになります。
さて、 ファイルシステムのディレクトリ構造にこれを応用するというのは基本でしょうからやってみます。 まずルートの下のサブディレクトリをリストに追加します。
.h configure -separator {/}
foreach e [glob -nocomplain /*] {
.h insert end $e
}
次に、これらの項目のどれかがダブルクリックされたら、
そのディレクトリの中に含まれるファイルやディレクトリをさらに階層的に追加していくようにしましょう。
bind .h <Double-Button-1> {
if {"[set i [%W curselection]]" != ""} {
set dir [%W get -full $i]
foreach e [glob -nocomplain $dir/*] {
.h insert end $e
}
}
}
リストボックスと違い、ハイアラキカルリストボックスのgetコマンドには
-fullオプションが追加されています。
これをつけないと、例えば先程の「::java::awt」という項目は
「awt」としか返ってきません。-fullオプションを使うと、
「::java::awt」のような階層つきの名前が返されます。
以上をまとめたソースプログラムです。
|