Tile

Tileパッケージは、TkのWidgetのテーマを変更する仕組みを提供します。
Tcl8.4から使えるようですが、次世代Tkのための実験的な試みのようです。

標準で以下のテーマが用意されています。(バージョン0.7.3)
但し、プラットフォームによってはサポートしていないテーマもあります。

テーマ説明
classicMotifスタイル
defaultX11スタイル
altGTK+のデフォルト・スタイル
clamGnomeスタイル
winnativeWindowsスタイル
xpnativeWindows XPスタイル
stepNeXTStepスタイル
aqua MacOS Xスタイル
※この他にも拡張可能で、Tileのdemoにはblueというテーマが添付されています。

スクリーンショット

Windows XPスタイルを選ぶと、美しい丸みのあるWidgetになります。
これだけでもテーマを変更できる価値がありそうです。

Windows XPスタイル

使い方

テーマを変更するには、tile::setThemeでテーマを指定するだけです。
利用可能なテーマは、tile::availableThemesコマンドで得られます。
現在のテーマは、::tile::currentTheme変数で得られます。

package require tile

tile::setTheme xpnative

pack [tbutton .btn -text Button]
pack [tlistbox .lst]

foreach name [tile::availableThemes] {
	.lst insert end $name
}

.lst selection set [lsearch [tile::availableThemes] $::tile::currentTheme]

Tileサンプル ←Windows XPでの実行例

xpnativeスタイルを使うとこんなに美しくなります。
また、TileパッケージにはTkにはないcombobox,notebook,treeview,progressbarのWidgetがあります。

xpnativeスタイル PocketPCスタイル?

package require tile

tile::setTheme xpnative

wm geometry . 240x267

pack [tlabelframe .f1 -text Widgets] -padx 3 -pady 3 -fill both
pack [tbutton .b -text Button] -in .f1 -pady 3
pack [tcheckbutton .cb -text CheckButton] -in .f1 -pady 3
pack [tradiobutton .rb -text RadioButton] -in .f1 -pady 3
pack [tframe .f2] -in .f1 -pady 3
tlabel .lcombo -text {ComboBox: }
tcombobox  .combo
pack .lcombo .combo -side left -in .f2
.combo insert end "選択してください"
pack [tframe .f3] -in .f1 -pady 3
tlabel .lpb -text {ProgressBar: }
tprogressbar .pb -maximum 10 -value 3
pack .lpb .pb -side left -in .f3
pack [tnotebook .nb] -in .f1 -pady 3 -fill both
ttk::treeview .tree -show tree -height 2
set parent [.tree insert {} end -text Parent -open 1]
.tree insert $parent end -text Child1
.tree insert $parent end -text Child2
ttk::treeview .listview -show headings -height 2 -columns [list col1 col2 col3]
.listview heading col1 -text Name
.listview heading col2 -text Age
.listview heading col3 -text Address
.listview insert {} end -id item1 -values "foo 20 xxx"
.listview insert {} end -id item2 -values "bar 30 xxx"
.listview column 0 -width 80
.listview column 1 -width 30
text .text -height 2
.text insert end {日本語表示やIMEでの日本語入力もできます。}
.nb add .tree -text Tree
.nb add .listview -text List
.nb add .text -text Text

注意事項

Tileパッケージは、実験的な試みであり、バージョンも0.7.3と若く、
仕様は予告なく変更される可能性があります。また、現時点では、
Widgetのすべてのオプションが正常に動作する保証はありません。
Tcl8.5から正式な対応となるかもしれませんが、正式版になるまで
積極的な使用は控えた方がいいかもしれません。(^^;

参考文献