ttk::notebook

ノートブックは、 ラベルのついたタブをクリックすることで幾つかのページを切り替えて表示することができるウィジェットで、 限られた画面の範囲内で集積度の高いアプリケーションを構築するのに威力を発揮します。
…って、tixNoteBook(Tix拡張のノートブック)の説明のコピペじゃないかという鋭いご指摘は、 今回は事情により全て無効とさせていただきます。

set nb [ttk::notebook .nb]

set f1 [ttk::frame $nb.f1]
label $f1.la1 -text "おなまえ:"
entry $f1.e1
label $f1.la2 -text "住所:"
entry $f1.e2
label $f1.la3 -text "メールアドレス:"
entry $f1.e3
pack {*}[winfo children $f1] -side top -anc w -padx 10

set f2 [ttk::frame $nb.f2]
set can [canvas $f2.can -width 200 -height 200 -bg #ffffff]
bind $can <ButtonRelease-1> {
    $can create oval [expr %x-3] [expr %y-3] [expr %x+3] [expr %y+3] \
      -fill red -outline #800000
}
pack {*}[winfo children $f2] -side top

$nb add $f1 -text "テキスト(T)"   -underline 5
$nb add $f2 -text "キャンバス(C)" -underline 6
$nb select $f2
ttk::notebook::enableTraversal $nb

pack $nb

ノートブックは::ttk::notebookコマンドで作ります。 各タブ(ページ)としては、frameや::ttk::frameウィジェットを個別に作り、 notebookのaddサブコマンドで追加します。 それら(frameや::ttk::frame)のウィジェット名が、 そのままタブページを識別するIDにもなります。
addは常に最後(右)に新しいタブページを追加しますが、 insertサブコマンドなら途中にも追加できます。
プログラムの中で特定のタブページを選択状態にするには、 selectサブコマンドを使い、対象のタブページのIDを指定します。
またキーボード・トラバーサルに関するひと工夫が、 タブページの-underlineオプションと、 「ttk::notebook::enableTraversal」コマンドです。 -underlineは、タブラベルに表示される文字列のN文字目を、 「ショートカットキー」として指定するものです。(Nは先頭が0) 「ttk::notebook::enableTraversal」を指定すると、次のキー操作が有効になります。
  • CTRL+TABキーで、表示するタブページが右に1つずつ移ります。
  • SHIFT+CTRL+TABキーで、表示するタブページが左に1つずつ移ります。
  • ALT+「ショートカットキー」で、そのタブページを表示します。
上の例では「テキスト(T)」というタブラベル文字列に対して-underlineを5と指定していますが、 この数字はバイト数ではなく文字数です。全角文字も1と数え、先頭が0ですから 5は"T"の文字を表します。 すなわち、ALT+Tキーを押せば、「テキスト(T)」のタブページが表示されます。


ttk::progressbar

プログレスバーは、時間のかかる処理などの進行状況を表示することを主目的とします。 ほとんどの場合、水平に長いバーの形をしていますが、 ::ttk::progressbarは垂直に長いバーも表示できます。

ttk::progressbar .pg1 -mode determinate -orient h -maximum 100 -length 200
.pg1 configure -value 20
.pg1 step 10
ttk::progressbar .pg2 -mode d -orient h -maximum 100 -length 200 -variable pgval
set pgval 40
ttk::progressbar .pg3 -mode indeterminate -orient h -maximum 100 -length 200
ttk::button .b1 -text "開始" -command "startAutoProgress .pg3"

proc startAutoProgress pg {
    $pg configure -value 0
    $pg start 25
}
pack {*}[winfo children .] -side top -anc w

プログレスバーは::ttk::progressbarコマンドで作ります。 -orientが水平か垂直かを指定するオプションで、horizontalが水平、verticalが垂直を表します。 (デフォルトはhorizontal) この水平か垂直かを選べるというこのウィジェットの特質から、 通常-widthと呼ばれるオプションがこのウィジェットでは-lengthという名前になっています。 意味は同じです。
-maximumは後述の進捗を表す値の最大値で、デフォルトは100です。(最小値は0で固定)
さて、プログレスバーの使い方なんですが、大きく(互いに全く違う) 2つの使い方があり、-modeで使い分けます。 "determinate"は、進捗の度合をユーザに示すためのもので、 プログラムで現在値を明示的に操作することで行います。 その例が上の.pg1と.pg2で、.pg1では「-value 20」と-valueオプションで現在の値を明示しています。 (100分の20ですから20%進んでいるということ) また、stepサブコマンドは、その数字分進めるという意味になります。 したがって、.pg1は値20を明示した後10進めているので、現在値は30となっています。
.pg2の方は-variableで変数をバインドしています。 この変数(pgval)に値を設定することで、進度を操作しています。
-modeのもう1つはindeterminateという長い名前ですが、 これは進捗を示すといえばそうなのですが、どちらかというと 「処理が進行中であることをアニメーションで示す」イメージです。 startサブコマンドを実行すると、バーの一部をブロックが左右(上下)に往復するアニメーションが表示されます。 stopで止めることができます。
それで、一応最低限の機能はあるのですが、「*%」という現在値を添える機能はないようです。 今後の細かい機能追加に期待ということでしょうか。

やねうらの top
(first uploaded 2010/01/04 last updated 2010/09/26, MISUMI URANO)