2007-12-30

Tk themed widgets


日リリースされた Tcl/Tk 8.5.0 では、"Tk themed widgets" (正式な訳語を知りませんので、便宜上「テーマ・ウィジェット」と呼ぶことにします)というウィジェットが追加されています。
このウィジェットは、拡張パッケージ Tilettk という名前空間に Tk の標準機能として統合されたものです(TIP#248)。
このパッケージは、ウィジェットを OS 固有の見映え(ルック&フィール)に近づけたり、あるいは firefox などで利用できるテーマ(スキン)と同じような機能を実現します。


Tk のデモプログラムにテーマ・ウィジェットのサンプルがありますが、サンプルコードの記述が読みにくいので、自分でも簡単なサンプルを作ってみました。先日リリースした、クロスコンパイル版 Windows 用 Tcl/Tk、tcltk8.5.0-011 を使っています。











#!/bin/sh
# the next line restarts using wish \
exec wish "$0" "$@"


# ----------------------------------------------------------------------------
# テーマ変更処理
# ----------------------------------------------------------------------------

proc changeTheme {themeVal} {
ttk::style theme use $themeVal
return
}

# ----------------------------------------------------------------------------
# メイン
# ----------------------------------------------------------------------------

wm resizable . 0 0
wm title . "Ttk"

set tk_icon "
R0lGODlhEAAQAIAAAP8AAP///yH5BAEAAAEALAAAAAAQABAAAAIpjI+py+C/nnSIynosrcBAn3QgE2x
bJGoi501hWpZrm13zOc2yopP+XwAAOw==
"
image create photo Tk -data $tk_icon

# デフォルトのテーマ設定
set theme "default"
changeTheme $theme

# メニューボタン
ttk::menubutton .mb \
-text "メニューボタン" \
-image Tk \
-compound left \
-cursor hand2 \
-menu .mb.theme
pack .mb -anchor w

menu .mb.theme
foreach themeName [ttk::themes] {
.mb.theme add radiobutton \
-label $themeName \
-variable theme \
-value $themeName \
-command {changeTheme $theme}
}
.mb.theme add separator
.mb.theme add command \
-label "Exit" \
-command exit

# テーマ名表示部
ttk::frame .fra
pack .fra -expand yes -fill both -padx 0 -side top

ttk::label .fra.lab1 -text "テーマ"
ttk::label .fra.lab2 -textvariable theme
pack .fra.lab1 -side left
pack .fra.lab2 -expand yes -fill both -padx 5 -side left

# ---
# ttkwidget_menubutton.tcl


テーマ名の一覧は、ttk::themes あるいは ttk::style theme names コマンドで得られますが、Windows 版と UNIX 版とでは利用できるテーマの数が違います。Windows 版で次の6種類、

winnative clam alt default classic xpnative

UNIX 版は、Windows 系のテーマを除いた次の4種類、

clam alt default classic

です。今後、標準で利用できるテーマの種類が増えるかもしれません。以下は、Fedora 8 (Linux) 上で実行した例です。デスクトップには Gnome を使用しています。

0 件のコメント: