"tkinter.ttk" --- Tk のテーマ付きウィジェット
*********************************************

**ソースコード:** Lib/tkinter/ttk.py

======================================================================

"tkinter.ttk" モジュールは、Tk 8.5 で導入されたテーマ付きウィジェット
群を提供します。 外観が固定されている従来の "tkinter" ウィジェットと異
なり、プラットフォームのネイティブなテーマに外観を合わせるため、アプリ
ケーションの見た目と操作感がよりよく、統一されたものになります。

"tkinter.ttk" の基本的な考え方は、ウィジェットの動作を実装するコードと
、外観を実装するコードをできるだけ分離することです。

Ttk ウィジェットは従来の "tkinter" ウィジェットと同じように使え、ウィ
ジェット階層、ジオメトリマネージャー、変数の連動、イベントバインディン
グの仕組みも共通です。 これらの基礎的な概念は "tkinter" のドキュメント
で説明しているため、ここでは繰り返しません。

Added in version 3.1.

参考:

  Tk ウィジェットのスタイル設定のサポート (TIP #48)
     テーマ付きウィジェットのスタイル設定エンジンを導入した Tcl 改善提
     案です。


Ttk を使う
==========

Ttk を使い始めるために、モジュールをインポートします:

   from tkinter import ttk

基本的な Tk ウィジェットを上書きするため、次のように Tk のインポートに
続けてインポートを行います:

   from tkinter import *
   from tkinter.ttk import *

このコードにより、Tk のウィジェットのいくつかを "tkinter.ttk" のウィジ
ェット ("Button"、"Checkbutton"、"Entry"、"Frame"、"Label"、
"LabelFrame"、"Menubutton"、"OptionMenu"、"PanedWindow"、"Radiobutton"
、"Scale"、"Scrollbar"、"Spinbox") で自動的に置き換えます。

注釈:

  "from tkinter.ttk import *" で従来のウィジェットを上書きする方法は、
  既存のコードを移行するのに便利です。 ただし、新しいコードでは通常、
  "from tkinter import ttk" でモジュールをインポートし、"ttk.Button"
  のようにテーマ付きウィジェットを明示的に参照する方が分かりやすくなり
  ます。

新しいウィジェットを使えば、各プラットフォームで見た目と操作感がよくな
るという直接的な利点がありますが、置き換え先のウィジェットには完全な互
換性はありません。 主な違いは、Ttk ウィジェットには "fg" や "bg" など
のスタイルに関するオプションがないことです。 代わりに "ttk.Style" クラ
スを使って、より高度なスタイル設定を行ってください。


Ttk ウィジェット
================

Ttk には 18 種類のウィジェットがあります。 そのうち 12 種類は tkinter
にもあるもので、"Button"、"Checkbutton"、"Entry"、"Frame"、"Label"、
"LabelFrame"、"Menubutton"、"PanedWindow"、"Radiobutton"、"Scale"、
"Scrollbar"、"Spinbox" です。 残りの 6 種類は新しいウィジェットで、
"Combobox"、"Notebook"、"Progressbar"、"Separator"、"Sizegrip"、
"Treeview" です。 すべて "Widget" のサブクラスです。

Ttk ウィジェットを使用すると、アプリケーションの見た目と使いやすさが向
上します。上述の通り、書式をコーディングする方法は異なります。

Tk のコード

   l1 = tkinter.Label(text="Test", fg="black", bg="white")
   l2 = tkinter.Label(text="Test", fg="black", bg="white")

Ttk のコード:

   style = ttk.Style()
   style.configure("BW.TLabel", foreground="black", background="white")

   l1 = ttk.Label(text="Test", style="BW.TLabel")
   l2 = ttk.Label(text="Test", style="BW.TLabel")

TtkStyling についての詳細は "Style" クラスの文書を読んでください。


ウィジェット
============

"ttk.Widget" は、Tk のテーマ付きウィジェットがサポートする標準のオプシ
ョンとメソッドを定義します。 直接インスタンス化するものではありません
。


標準オプション
--------------

すべての "ttk" ウィジェットは次のオプションを受け付けます:

+-------------+----------------------------------------------------------------+
| オプション  | 説明                                                           |
|=============|================================================================|
| "class"     | ウィンドウクラスを指定します。このクラスはオプションデータベー |
|             | スにウィ ンドウの他のオプションについて問い合わせを行うときに  |
|             | 使われ、これにより ウィンドウのデフォルトのバインドタグを決定  |
|             | したり、ウィジェットのデフォ ルトのレイアウトやスタイルを選択  |
|             | します。このオプションは読み出し専用で 、ウィンドウが作成され  |
|             | るときにのみ指定できます。                                     |
+-------------+----------------------------------------------------------------+
| cursor      | ウィジェットで使うマウスカーソルを指定します。 Tk オプションの |
|             | データ型 の *cursor* オプション型を参照してください。 空文字列 |
|             | (デフォルト) に 設定すると、親ウィジェットのカーソルを継承しま |
|             | す。                                                           |
+-------------+----------------------------------------------------------------+
| takefocus   | キーボードによる移動のときにウィンドウがフォーカスを受け入れる |
|             | かを決定 します。0、1、空文字列のいずれかを返します。0 が返さ  |
|             | れると、キーボード による移動でそのウィンドウは常にスキップさ  |
|             | れます。1 なら、そのウィンド ウが表示されているときに限り入力  |
|             | フォーカスを受け入れます。そして空文字 列は、移動スクリプトに  |
|             | よってウィンドウにフォーカスを当てるかどうかが決 まることを意  |
|             | 味します。                                                     |
+-------------+----------------------------------------------------------------+
| style       | 独自のウィジェットスタイルを指定するのに使われます。           |
+-------------+----------------------------------------------------------------+


スクロール可能なウィジェットのオプション
----------------------------------------

以下のオプションはスクロールバーで操作されるウィジェットが持っているオ
プションです。

+------------------+-----------------------------------------------------------+
| オプション       | 説明                                                      |
|==================|===========================================================|
| xscrollcommand   | 水平方向のスクロールバーとのやり取りに使われます。  ウィ  |
|                  | ジェットのウィンドウ内の表示範囲が変わると、              |
|                  | *xscrollcommand* コー ルバックを呼び出します。  通常は、  |
|                  | スクロールバーの "Scrollbar.set" メソッドをこのオプション |
|                  | に指 定します。 これにより、ウィンドウ内の表示範囲が変わ  |
|                  | るたびにスクロール バーが更新されます。                   |
+------------------+-----------------------------------------------------------+
| yscrollcommand   | 垂直方向のスクロールバーとのやり取りに使われます。詳しく  |
|                  | は、上記を参照 してください。                             |
+------------------+-----------------------------------------------------------+


ラベルのオプション
------------------

以下のオプションはラベルやボタンやボタンに類似したウィジェットが持って
いるオプションです。

+----------------+-------------------------------------------------------------+
| オプション     | 説明                                                        |
|================|=============================================================|
| text           | ウィジェットに表示される文字列を指定します。                |
+----------------+-------------------------------------------------------------+
| textvariable   | text オプションの代わりに使う値の変数名を指定します。       |
+----------------+-------------------------------------------------------------+
| underline      | このオプションを設定すると、文字列の中で下線を引く文字のイ  |
|                | ンデックス (0 基点) を指定します。下線が引かれた文字はショ  |
|                | ートカットとして使われ ます。                               |
+----------------+-------------------------------------------------------------+
| image          | 表示する画像を指定します。これは 1 つ以上の要素を持つリスト |
|                | です。先頭 の要素はデフォルトの画像名です。残りの要素は     |
|                | "Style.map()" で定義され ているような状態名と値のペアの並び |
|                | で、ウィジェットがある状態、もしくは ある状態の組み合わせに |
|                | いるときに使用する別の画像を指定します。このリス トにある全 |
|                | ての画像は同じサイズでなればなりません。                    |
+----------------+-------------------------------------------------------------+
| compound       | text オプションと image オプションが両方とも指定されていた  |
|                | 場合に、テキ ストに対して画像をどう配置するかを指定します。 |
|                | 適当な値は:  * text: テキストのみ表示する  * image: 画像の  |
|                | み表示する  * top, bottom, left, right: それぞれ画像をテキ  |
|                | ストの上、下、左、右に配 置する。  * none: デフォルト。もし |
|                | あれば画像を表示し、そうでなければテキストを表 示する。     |
+----------------+-------------------------------------------------------------+
| "width"        | 0 より大きい場合、テキストラベルを作成するのにどれくらいの  |
|                | スペースを使 うかを文字の幅で指定します。0 より小さい場合、 |
|                | 最小の幅が指定されます。 0 もしくは無指定の場合、テキストラ |
|                | ベルに対して自然な幅が使われます。                          |
+----------------+-------------------------------------------------------------+


互換性のためのオプション
------------------------

+----------+------------------------------------------------------------------+
| オプショ | 説明                                                             |
| ン       |                                                                  |
|==========|==================================================================|
| state    | "normal" か "disabled" に設定され、 "disabled" 状態のビットをコ  |
|          | ントロ ールします。これは書き込み専用のオプションです: これを設  |
|          | 定するとウィジ ェットの状態を変更できますが、 "Widget.state()"   |
|          | メソッドはこのオプショ ンに影響を及ぼしません。                  |
+----------+------------------------------------------------------------------+


ウィジェットの状態
------------------

ウィジェットの状態は独立した状態フラグのビットマップです。

+--------------+---------------------------------------------------------------+
| Flag         | 説明                                                          |
|==============|===============================================================|
| active       | マウスカーソルがウィジェットの上にあり、マウスのボタンをクリ  |
|              | ックするこ とで何らかの動作をさせられます                     |
+--------------+---------------------------------------------------------------+
| disabled     | プログラムによってウィジェットは無効化されています            |
+--------------+---------------------------------------------------------------+
| focus        | ウィジェットにキーボードフォーカスがあります                  |
+--------------+---------------------------------------------------------------+
| pressed      | ウィジェットは押されています                                  |
+--------------+---------------------------------------------------------------+
| selected     | チェックボタンやラジオボタンのようなウィジェットでの "オン"   |
|              | や "チェッ ク有" や "選択中" に当たります                     |
+--------------+---------------------------------------------------------------+
| background   | Windows と Mac には "アクティブな" もしくは最前面のウィンドウ |
|              | という概 念があります。背面のウィンドウにあるウィジェットには |
|              | *background* 状態 が設定され、最前面のウィンドウにあるウィジ  |
|              | ェットでは解除されます                                        |
+--------------+---------------------------------------------------------------+
| readonly     | ウィジェットはユーザからの変更を受け付けません                |
+--------------+---------------------------------------------------------------+
| alternate    | ウィジェット特有の切り替え表示になっています                  |
+--------------+---------------------------------------------------------------+
| invalid      | ウィジェットの値が不正です                                    |
+--------------+---------------------------------------------------------------+

状態仕様は状態名の並びになっていて、状態名の先頭にはビットがオフになっ
ていることを示す感嘆符が付くことがあります。


ttk.Widget
----------

以下のメソッドに加え、"ttk.Widget" は "tkinter.Widget.cget" と
"tkinter.Widget.configure" もサポートします。

class tkinter.ttk.Widget

   identify(x, y)

      *x* *y* の位置にある要素の名前、もしくはその位置に要素が無ければ
      空文字列を返します。

      *x* と *y* はウィジェットに対するピクセル単位の座標です。

   instate(statespec, callback=None, *args, **kw)

      ウィジェットの状態をチェックします。コールバックが指定されていな
      い場合、ウィジェットの状態が *statespec* に一致していれば "True"
      、そうでなければ "False" を返します。コールバックが指定されてい
      て、ウィジェットの状態が *statespec* に一致している場合、引数に
      args を指定してそのコールバックを呼び出します。

   state(statespec=None)

      ウィジェットの状態を変更したり、取得したりします。*statespec* が
      指定されている場合、それに応じてウィジェットの状態を設定し、どの
      フラグが変更されたかを示す新しい *statespec* を返します。
      *statespec* が指定されていない場合、現在の状態フラグを返します。

      "Wm.state" と混同しないでください。

   通常 *statespec* はリストもしくはタプルです。


コンボボックス
==============

"ttk.Combobox" ウィジェットは、テキストフィールドと値のポップダウンリ
ストを組み合わせたものです。 "Entry" のサブクラスです。

"Widget" から継承した "cget()"、"configure()"、"identify()"、
"instate()"、"state()" と、 "Entry" から継承した "bbox()"、"delete()"
、"icursor()"、"index()"、"insert()"、"selection*"、"xview*" に加え、
"ttk.Combobox" で説明するメソッドがあります。


オプション
----------

このウィジェットは以下の固有のオプションを受け付けます:

+-------------------+----------------------------------------------------------+
| オプション        | 説明                                                     |
|===================|==========================================================|
| exportselection   | 真偽値です。 真に設定すると、ウィジェット内の選択範囲が  |
|                   | X の選択範囲に 連動します (例えば "Misc.selection_get()" |
|                   | で取得できます)。                                        |
+-------------------+----------------------------------------------------------+
| justify           | ウィジェットの中でテキストをどう配置するかを指定します。 |
|                   | "left", "center", "right" のうちのどれか 1 つです。      |
+-------------------+----------------------------------------------------------+
| "height"          | ポップダウンリストの高さを行数で指定します。             |
+-------------------+----------------------------------------------------------+
| postcommand       | コンボボックスの値を表示する直前に呼び出される、         |
|                   | (Misc.register などで 登録した) スクリプトです。どの値を |
|                   | 表示するかについても指定できます。                       |
+-------------------+----------------------------------------------------------+
| state             | "normal"、"readonly"、"disabled" のいずれかです。        |
|                   | "readonly" 状態では 値を直接編集できず、利用者はドロップ |
|                   | ダウンリストの値から選ぶことだけが できます。 "normal"   |
|                   | 状態ではテキストフィールドを直接編集できます。           |
|                   | "disabled" 状態では操作できません。                      |
+-------------------+----------------------------------------------------------+
| textvariable      | コンボボックスの値とリンクさせる変数名を指定します。その |
|                   | 変数の値が変更 されたとき、ウィジェットの値は更新されま  |
|                   | す。ウィジェットの値が更新され たときも同様です。        |
|                   | "tkinter.StringVar" を参照してください。                 |
+-------------------+----------------------------------------------------------+
| "values"          | ドロップダウンリストに表示する値のリストを指定します。   |
+-------------------+----------------------------------------------------------+
| "width"           | 入力ウィンドウに必要な幅をウィジェットのフォントの平均的 |
|                   | なサイズの文字 で測った、文字数を指定します。            |
+-------------------+----------------------------------------------------------+

注釈:

  Tk 9.1 で *locale* オプションが追加されました。 テキスト内の単語や文
  字の境界を判断するためのロケールを選択します (デフォルトは ""C"")。


仮想イベント
------------

コンボボックスウィジェットは、ユーザが値のリストから1つ選んだときに仮
想イベント **<<ComboboxSelected>>** を生成します。


ttk.Combobox
------------

class tkinter.ttk.Combobox

   current(newindex=None)

      *newindex* が指定されている場合、コンボボックスの値がドロップダ
      ウンリストの *newindex* の位置にある値に設定されます。そうでない
      場合、現在の値のインデックスを、もしくは現在の値がリストに含まれ
      ていないなら -1 を返します。

   get()

      コンボボックスの現在の値を返します。

   set(value)

      コンボボックスの値を *value* に設定します。


スピンボックス
==============

"ttk.Spinbox" ウィジェットは、増減用の矢印を加えた "ttk.Entry" です。
数値や文字列値のリストに使えます。 このウィジェットは "Entry" のサブク
ラスです。 "Widget" から継承した "cget()"、"configure()"、"identify()"
、"instate()"、"state()" と、 "Entry" から継承した "bbox()"、
"delete()"、"icursor()"、"index()"、"insert()"、"xview*" に加え、
"ttk.Spinbox" で説明するメソッドがあります。


オプション
----------

このウィジェットは以下の固有のオプションを受け付けます:

+------------------------+--------------------------------------------------------+
| オプション             | 説明                                                   |
|========================|========================================================|
| from                   | 浮動小数点数です。 設定すると、減少ボタンで減らせる最  |
|                        | 小値になります。 "from" は Python のキーワードなので、 |
|                        | 引数として使う場合は "from_" と綴 る必要があります。   |
+------------------------+--------------------------------------------------------+
| to                     | 浮動小数点数です。 設定すると、増加ボタンで増やせる最  |
|                        | 大値になります。                                       |
+------------------------+--------------------------------------------------------+
| increment              | 浮動小数点数です。 増減ボタンで値をどれだけ変えるかを  |
|                        | 指定します。 デフ ォルトは 1.0 です。                  |
+------------------------+--------------------------------------------------------+
| "values"               | 文字列または浮動小数点数のシーケンスです。 指定すると  |
|                        | 、増減ボタンは数 値を増減させる代わりに、このシーケン  |
|                        | スの項目を順に切り替えます。                           |
+------------------------+--------------------------------------------------------+
| wrap                   | 真偽値です。 "True" なら、増加ボタンでは "to" から     |
|                        | "from" に、減少ボタ ンでは "from" から "to" に循環しま |
|                        | す。                                                   |
+------------------------+--------------------------------------------------------+
| format                 | 文字列です。 増減ボタンで設定する数値の書式を指定しま  |
|                        | す。 "%W.Pf" とい う形式でなければなりません。 W は埋  |
|                        | め文字を含む値の幅、P は精度で、'%' と 'f' はそのまま  |
|                        | の文字です。                                           |
+------------------------+--------------------------------------------------------+
| command                | Python の呼び出し可能オブジェクトです。 増加ボタンか減 |
|                        | 少ボタンを押すた びに、引数なしで呼び出します。        |
+------------------------+--------------------------------------------------------+


仮想イベント
------------

スピンボックスウィジェットは、利用者が <Up> を押すと **<<Increment>>**
仮想イベントを、<Down> を押すと **<<Decrement>>** 仮想イベントを生成し
ます。


ttk.Spinbox
-----------

class tkinter.ttk.Spinbox

   整数でない増分を使う場合は、数値とロケール を参照してください。

   Added in version 3.8.

   get()

      スピンボックスの現在の値を返します。

   set(value)

      スピンボックスの値を *value* に設定します。


ノートブック
============

ノートブックウィジェットは複数のウィンドウを管理し、同時に 1 つのウィ
ンドウを表示します。それぞれの子ウィンドウはタブの関連付けられていて、
ユーザはそれを選択して表示されているウィンドウを切り替えます。


オプション
----------

このウィジェットは以下の固有のオプションを受け付けます:

+-----------+------------------------------------------------------------------+
| オプショ  | 説明                                                             |
| ン        |                                                                  |
|===========|==================================================================|
| "height"  | 0 より大きな値が設定されている場合、 (内部のパディングやタブを含 |
|           | まない ) ペイン領域に必要な高さを指定します。 それ以外の場合、全 |
|           | てのペインの 高さの最大値が使われます。                          |
+-----------+------------------------------------------------------------------+
| padding   | ノートブックの外周に付け足す追加の領域の量を指定します。パディン |
|           | グは最 大 4 個の長さ指定のリストです: 左、上、右、下の順で指定し |
|           | ます。4 個よ り少ない場合、デフォルトで下は上と、右は左と、上は  |
|           | 左と同じ値が、それぞ れ使われます。                              |
+-----------+------------------------------------------------------------------+
| "width"   | 0 より大きな値が指定されている場合、(内部のパディングを含まない) |
|           | ペイ ン領域に必要な幅を指定します。 それ以外の場合、全てのペイン |
|           | の幅の最大 値が使われます。                                      |
+-----------+------------------------------------------------------------------+


タブのオプション
----------------

タブ用のオプションもあります:

+-------------+----------------------------------------------------------------+
| オプション  | 説明                                                           |
|=============|================================================================|
| state       | "normal", "disabled", "hidden" のうちどれか 1 つです。         |
|             | "disabled" の場 合、タブは選択することができません。 "hidden"  |
|             | の場合、タブは表示されま せん。                                |
+-------------+----------------------------------------------------------------+
| sticky      | "grid" ジオメトリマネージャーと同様に、ペイン領域内での子ウィ  |
|             | ンドウの 配置を指定します。 値は "n"、"s"、"e"、"w" の各文字を |
|             | 0 個以上含む文字 列です。 各文字は、子ウィンドウを寄せる辺 (北 |
|             | 、南、東、西) を表します 。                                    |
+-------------+----------------------------------------------------------------+
| padding     | ノートブックとこのペインの間に付け足す追加の領域の量を指定しま |
|             | す。文法 はこのウィジェットの padding オプションと同じです。   |
+-------------+----------------------------------------------------------------+
| text        | タブに表示するテキストを指定します。                           |
+-------------+----------------------------------------------------------------+
| image       | タブに表示する画像を指定します。 "Widget" のオプション image   |
|             | の説明を 参照してください。                                    |
+-------------+----------------------------------------------------------------+
| compound    | text オプションと image オプションが両方指定されているときにテ |
|             | キストに 対して画像をどう表示するかを指定します。指定する値に  |
|             | ついては Label Options を参照してください。                    |
+-------------+----------------------------------------------------------------+
| underline   | テキスト中の下線を引く文字のインデックス (0 基点) を指定します |
|             | 。 "Notebook.enable_traversal()" が呼ばれていた場合、下線が引  |
|             | かれた文字は ショートカットとして使われます。                  |
+-------------+----------------------------------------------------------------+


タブの識別子
------------

"ttk.Notebook" のいくつかのメソッドにある "tab_id" は、次のいずれかの
形式を取ります:

* 0 からタブの数の間の整数

* 子ウィンドウの名前

* タブを指し示す "@x,y" という形式の位置指定

* 現在選択されているタブを指し示すリテラル文字列 "current"

* タブ数を返すリテラル文字列 "end" ("Notebook.index()" でのみ有効)


仮想イベント
------------

このウィジェットは新しいタブが選択された後に仮想イベント
**<<NotebookTabChanged>>** を生成します。


ttk.Notebook
------------

class tkinter.ttk.Notebook

   add(child, **kw)

      ノートブックに新しいタブを追加します。

      ウィンドウが現在ノートブックによって管理されているが隠れている場
      合、以前の位置に復元します。

      利用可能なオプションのリストについては Tab Options を参照してく
      ださい。

   forget(tab_id)

      *tab_id* で指定されたタブを削除します。関連付けられていたウィン
      ドウは切り離され、管理対象でなくなります。

      このメソッドは、継承したジオメトリマネージャーの "forget()" を隠
      します。 ウィジェット自体をマネージャーの管理対象から外すには、
      "pack_forget()"、"grid_forget()"、"place_forget()" を使ってくだ
      さい。

   hide(tab_id)

      *tab_id* で指定されたタブを隠します。

      タブは表示されませんが、関連付いているウィンドウはノートブックに
      よって保持されていて、その設定も記憶されています。隠れたタブは
      "add()" コマンドで復元できます。

   identify(x, y)

      位置 *x*、*y* にあるタブの構成要素の名前を返します。 構成要素が
      なければ空文字列を返します。

   index(tab_id)

      *tab_id* で指定されたタブのインデックスを、 *tab_id* が文字列の
      "end" だった場合はタブの総数を返します。

   insert(pos, child, **kw)

      指定された位置にペインを挿入します。

      *pos* は文字列の "end" か整数のインデックスか管理されている子ウ
      ィンドウの名前です。 *child* が既にノートブックの管理対象だった
      場合、指定された場所に移動させます。

      利用可能なオプションのリストについては Tab Options を参照してく
      ださい。

   select(tab_id=None)

      指定された *tab_id* を選択します。

      関連付いている子ウィンドウは表示され、直前に選択されていたウィン
      ドウは (もし異なれば) 表示されなくなります。 *tab_id* が指定され
      ていない場合は、現在選択されているペインのウィジェット名を返しま
      す。

   tab(tab_id, option=None, **kw)

      指定された *tab_id* のオプションを問い合わせたり、変更したりしま
      す。

      *kw* が与えられなかった場合、タブのオプション値の辞書を返します
      。 *option* が指定されていた場合、その *option* の値を返します。
      それ以外の場合は、オプションに対応する値が設定されます。

   tabs()

      ノートブックが管理するウィンドウのタプルを返します。

   enable_traversal()

      このノートブックを含む最上位にあるウィンドウでのキーボード移動を
      可能にします。

      これによりノートブックを含んだ最上位にあるウィンドウに対し、以下
      のキーバインディングが追加されます:

      * "Control"-"Tab": 現在選択されているタブの 1 つ次のタブを選択し
        ます。

      * "Shift"-"Control"-"Tab": 現在選択されているタブの 1 つ前のタブ
        を選択します。

      * "Alt"-"K": *K* があるタブの (下線が引かれた) ショートカットキ
        ーだとして、そのタブを選択します。

      1 つのトップレベルウィンドウ内で、入れ子のものを含め、複数のノー
      トブックのキーボード移動を有効にできます。 ただし、すべてのペイ
      ンがノートブックの直接の子である場合にだけ、ノートブックのキーボ
      ード操作が正しく動作します。


プログレスバー
==============

"ttk.Progressbar" ウィジェットは、時間のかかる操作の状態を表示します。
2 つのモードで動作します。 1) 確定 (determinate) モードでは、全作業量
に対して完了した量を表示します。 2) 不確定 (indeterminate) モードでは
、アニメーションによって処理が進んでいることを利用者に知らせます。


オプション
----------

このウィジェットは以下の固有のオプションを受け付けます:

+------------+-----------------------------------------------------------------+
| オプション | 説明                                                            |
|============|=================================================================|
| orient     | "horizontal" もしくは "vertical" のいずれかです。プログレスバー |
|            | の方向 を指定します。                                           |
+------------+-----------------------------------------------------------------+
| length     | プログレスバーの長さを指定します。 (水平方向の場合は幅、垂直方  |
|            | 向の場合 は高さです)                                            |
+------------+-----------------------------------------------------------------+
| mode       | "determinate" か "indeterminate" のいずれかです。               |
+------------+-----------------------------------------------------------------+
| maximum    | 最大値を数値で指定します。デフォルトは 100 です。               |
+------------+-----------------------------------------------------------------+
| value      | プログレスバーの現在値です。 確定 ("determinate") モードでは、  |
|            | 完了した 作業量を表します。 不確定 ("indeterminate") モードでは |
|            | 、*maximum* を法 とする剰余として解釈します。 つまり、値が      |
|            | *maximum* だけ増えるとプログ レスバーは 1 サイクルを完了します  |
|            | 。                                                              |
+------------+-----------------------------------------------------------------+
| variable   | value オプションとリンクさせる変数名です。指定されている場合、  |
|            | 変数の値 が変更されるとプログレスバーの値は自動的にその値に設定 |
|            | されます。                                                      |
+------------+-----------------------------------------------------------------+
| phase      | 読み出し専用のオプションです。このウィジェットの値が 0 より大き |
|            | く、か つ決定的モードでは最大値より小さいときに、ウィジェットが |
|            | 定期的にこのオ プションの値を増加させます。このオプションは現在 |
|            | の画面テーマが追加のア ニメーション効果を出すのに使います。     |
+------------+-----------------------------------------------------------------+


ttk.Progressbar
---------------

class tkinter.ttk.Progressbar

   start(interval=None)

      自動増加モードを開始します: *interval* ミリ秒ごとに
      "Progressbar.step()" を繰り返し呼び出すタイマーイベントを設定し
      ます。引数で指定しない場合は、 *interval* はデフォルトで 50 ミリ
      秒になります。

   step(amount=None)

      プログレスバーの値を *amount* だけ増加させます。

      引数で指定しない場合は、 *amount* はデフォルトで 1.0 になります
      。

   stop()

      自動増加モードを停止します: このプログレスバーの
      "Progressbar.start()" で開始された繰り返しのタイマーイベントを全
      てキャンセルします。


セパレータ
==========

"ttk.Separator" ウィジェットは、水平方向または垂直方向の区切り線を表示
します。

"ttk.Widget" から継承するメソッド以外のメソッドはありません。


オプション
----------

このウィジェットは次の特定のオプションを受け付けます。

+----------+------------------------------------------------------------------+
| オプショ | 説明                                                             |
| ン       |                                                                  |
|==========|==================================================================|
| orient   | "horizontal" か "vertical" のいずれかです。セパレータの方向を指  |
|          | 定しま す。                                                      |
+----------+------------------------------------------------------------------+


サイズグリップ
==============

"ttk.Sizegrip" ウィジェット (グローボックスとも呼びます) では、グリッ
プを押してドラッグすることで、そのウィジェットを含むトップレベルウィン
ドウのサイズを変更できます。

"ttk.Widget" から継承するもの以外に、固有のオプションやメソッドはあり
ません。


プラットフォーム固有のメモ
--------------------------

* macOS では、最上位のウィンドウにはデフォルトで組み込みのサイズグリッ
  プが含まれています。組み込みのグリップが "Sizegrip" を隠してしまうの
  で、 "Sizegrip" を追加しても問題ありません。


バグ
----

* If the containing toplevel's position was specified relative to the
  right or bottom of the screen (for example, ....), the "Sizegrip"
  widget will not resize the window.

* このウィジェットは "南東" 方向のサイズ変更しかサポートしていません。


ツリービュー
============

"ttk.Treeview" ウィジェットは、要素の階層的な集まりを表示します。 各要
素は、テキストラベルと、省略可能な画像およびデータ値のリストを持ちます
。 データ値はツリーラベルの後に続くカラムに表示されます。

データが表示される順序はウィジェットの "displaycolumns" オプションで制
御されます。ツリーウィジェットはカラムヘッダを表示することもできます。
カラムには数字もしくはウィジェットの columns オプションにある名前でア
クセスできます。 Column Identifiers を参照してください。

それぞれの要素は一意な名前で識別されます。要素の作成時に識別子が与えら
れなかった場合、ウィジェットが要素の識別子を生成します。このウィジェッ
トには "{}" という名前の特別なルート要素があります。ルート要素自身は表
示されません; その子要素たちが階層の最上位に現れます。

それぞれの要素はタグのリストも持っていて、イベントバインディングと個別
の要素を関連付け、要素の見た目を管理するのに使えます。

ツリービューウィジェットは水平方向と垂直方向のスクロールをサポートして
いて、 Scrollable Widget Options に記述してあるオプションと
"Treeview.xview()" メソッドおよび "Treeview.yview()" メソッドが使えま
す。


オプション
----------

このウィジェットは以下の固有のオプションを受け付けます:

+------------------+----------------------------------------------------------+
| オプション       | 説明                                                     |
|==================|==========================================================|
| columns          | カラム数とその名前を指定するカラム識別子のリストです。   |
+------------------+----------------------------------------------------------+
| displaycolumns   | どのデータカラムをどの順序で表示するかを指定する、 (名前 |
|                  | もしくは整数の インデックスの) カラム識別子のリストか、  |
|                  | 文字列 "#all" です。                                     |
+------------------+----------------------------------------------------------+
| "height"         | 表示する行数を指定します。メモ: 表示に必要な幅はカラム幅 |
|                  | の合計から決定 されます。                                |
+------------------+----------------------------------------------------------+
| padding          | ウィジェットの内部のパディングのサイズを指定します。パデ |
|                  | ィングは最大 4 個の長さ指定のリストです。                |
+------------------+----------------------------------------------------------+
| selectmode       | 組み込みのクラスバインディングによる選択状態の管理方法を |
|                  | 指定します。 "extended"、"browse"、"none" のいずれかです |
|                  | 。 "extended" (デフォルト) では複数の要素を選択できます  |
|                  | 。 "browse" では一度に 1 つの要素だけを選 択します。     |
|                  | "none" では、組み込みのバインディングは選択状態を変更し  |
|                  | ませ ん。  このオプションの値にかかわらず、アプリケーシ  |
|                  | ョンのコードやタグのイベン トバインディングからは、選択  |
|                  | 状態を自由に設定できます。                               |
+------------------+----------------------------------------------------------+
| show             | ツリーのどの要素を表示するかを指定する、以下にある値を 0 |
|                  | 個以上含むリ ストです。  * tree: カラム #0 にツリーのラ  |
|                  | ベルを表示します。  * headings: ヘッダ行を表示します。   |
|                  | デフォルトは "tree headings" で、すべての要素を表示しま  |
|                  | す。  **メモ**: show="tree" が指定されていない場合でも、 |
|                  | カラム #0 は常にツリ ーカラムを参照します。              |
+------------------+----------------------------------------------------------+

注釈:

  Tk 9.0 で "Treeview" にいくつかの機能が加わりました。 *selectmode*
  オプションに ""single"" と ""multiple"" の値を追加しました。 新しい
  ウィジェットオプションとして、*selecttype* (""item"" または ""cell""
  の選択)、*striped* (行の縞模様)、*titlecolumns* / *titleitems* (スク
  ロールしても固定されるカラムや行) を導入しました。 カラムには
  *separator* オプション、要素には *hidden* オプションが加わりました。
  Tk 9.1 で *rowheight* と *headingheight* オプションを追加しました。


要素のオプション
----------------

以下の要素オプションは、ウィジェットの insert コマンドと item コマンド
で要素に対して指定できます。

+----------+-----------------------------------------------------------------+
| オプショ | 説明                                                            |
| ン       |                                                                 |
|==========|=================================================================|
| text     | アイテムに表示するテキストラベルです。                          |
+----------+-----------------------------------------------------------------+
| image    | ラベルの左に表示される Tk 画像です。                            |
+----------+-----------------------------------------------------------------+
| "values" | 要素に関連付けられている値のリストです。  各要素の値の数は、ウ  |
|          | ィジェットの "columns" オプションのカラム数に合わ せることを想  |
|          | 定しています。 値の数がカラム数より少なければ、残りは空と して  |
|          | 扱います。 多ければ、余分な値は無視します。                     |
+----------+-----------------------------------------------------------------+
| open     | 要素の子供を表示するか隠すかを指示する "True"/"False" 値です。  |
+----------+-----------------------------------------------------------------+
| tags     | この要素に関連付いているタグのリストです。                      |
+----------+-----------------------------------------------------------------+


タグのオプション
----------------

以下のオプションはタグに対して設定できます:

+--------------+-------------------------------------------------------------+
| オプション   | 説明                                                        |
|==============|=============================================================|
| foreground   | テキストの色を指定します。                                  |
+--------------+-------------------------------------------------------------+
| background   | セルや要素の背景色を指定します。                            |
+--------------+-------------------------------------------------------------+
| font         | テキストを描画するときに使うフォントを指定します。          |
+--------------+-------------------------------------------------------------+
| image        | 要素の image オプションが空だった場合に使用する画像を指定し |
|              | ます。                                                      |
+--------------+-------------------------------------------------------------+


カラム識別子
------------

カラム識別子は以下のいずれかの形式を取ります:

* columns オプションのリストにある名前。

* n 番目のデータカラムを指し示す整数 n 。

* n を整数として n 番目の表示されているカラムを指し示す #n という形式
  の文字列。

注釈:

* 要素のオプション値は実際に格納されている順序とは違った順序で表示され
  ることがあります。

* show="tree" が指定されていない場合でも、カラム #0 は常にツリーカラム
  を指しています。

データカラムを指す数字は、要素の values オプションのリストのインデック
スです; 表示カラムを指す数字は、値が表示されているツリーのカラム番号で
す。ツリーラベルはカラム #0 に表示されます。 displaycolumns オプション
が設定されていない場合は、 n 番目のデータカラムはカラム #n+1 に表示さ
れます。再度言っておくと、 **カラム #0 は常にツリーカラムを指します**
。


仮想イベント
------------

ツリービューは以下の仮想イベントを生成します。

+----------------------+----------------------------------------------------+
| Event                | 説明                                               |
|======================|====================================================|
| <<TreeviewSelect>>   | 選択状態が変更されたときに生成されます。           |
+----------------------+----------------------------------------------------+
| <<TreeviewOpen>>     | フォーカスが当たっている要素に open=True が設定さ  |
|                      | れる直前に生成されま す。                          |
+----------------------+----------------------------------------------------+
| <<TreeviewClose>>    | フォーカスが当たっている要素に open=False が設定さ |
|                      | れた直後に生成されま す。                          |
+----------------------+----------------------------------------------------+

"Treeview.focus()" メソッドと "Treeview.selection()" メソッドは変更を
受けた要素を判別するのに使えます。


ttk.Treeview
------------

class tkinter.ttk.Treeview

   bbox(item, column=None)

      (ツリービューウィジェットのウィンドウを基準として) 指定された
      *item* のバウンディングボックス情報を (x 座標, y 座標, 幅, 高さ)
      の形式で返します。

      *column* を指定すると、そのセルのバウンディングボックスを返しま
      す。 *item* が表示されていなければ (閉じた要素の子孫であるか、ス
      クロールによって画面外にある場合)、空文字列を返します。

      継承した "Misc.bbox()" を隠します。 grid のバウンディングボック
      スを取得するには "grid_bbox()" を使用してください。

   get_children(item=None)

      *item* の子要素をタプルで返します。

      *item* が指定されていなかった場合は、ルート要素の子供が返されま
      す。

   set_children(item, *newchildren)

      *item* の子要素を *newchildren* で置き換えます。

      *item* にいる子供のうち *newchildren* にないものはツリーから切り
      離されます。 *newchildren* にあるどの要素も *item* の祖先であっ
      てはいけません。 *newchildren* を指定しなかった場合は、 *item*
      の子要素が全て切り離されることに注意してください。

   column(column, option=None, **kw)

      指定した *column* のオプションを問い合わせたり、変更したりします
      。

      *kw* が与えられなかった場合は、カラムのオプション値の辞書が返さ
      れます。 *option* が指定されていた場合は、その *option* の値が返
      されます。それ以外の場合は、オプションに値を設定します。

      設定できるオプションとその値は次の通りです:

      *id*
         カラム名を返します。これは読み出し専用のオプションです。

      *anchor*: 標準の Tk アンカー値のいずれか。
         このカラムでセルに対してテキストをどう配置するかを指定します
         。

      *minwidth*: 幅
         カラムの最小幅をピクセル単位で表したものです。ツリービューウ
         ィジェットは、ウィジェットのサイズが変更されたりカラムをユー
         ザがドラッグして移動させたりしたときに、このオプションで指定
         した幅より狭くすることはありません。

      *separator*: "True"/"False"
         カラムの右側にカラム区切りを描画するかどうかを指定します。

      *stretch*: "True"/"False"
         ウィジェットがサイズ変更されたとき、カラムの幅をそれに合わせ
         るかどうかを指定します。

      *width*: 幅
         カラムの幅をピクセル単位で表したものです。

      ツリーカラムの設定を行うには、 column = "#0" を付けてこのメソッ
      ドを呼び出してください。

   delete(*items)

      指定された *items* とその子孫たち全てを削除します。

      ルート要素は削除できません。

   detach(*items)

      指定された *items* を全てツリーから切り離します。

      その要素と子孫たちは依然として存在していて、ツリーの別の場所に再
      度挿入することができますが、隠された状態になり表示はされません。

      ルート要素は切り離せません。

   exists(item)

      指定された *item* がツリーに存在すれば "True" を、それ以外は
      "False" を返します。

   focus(item=None)

      *item* が指定されていた場合は、 *item* にフォーカスを当てます。
      そうでない場合は、現在フォーカスが当たっている要素が、どの要素に
      もフォーカスが当たっていない場合は '' が返されます。

      継承した "Misc.focus()" を隠します。 ウィジェット自体にフォーカ
      スを当てるには "focus_set()" を使用してください。

   heading(column, option=None, **kw)

      指定された *column* の heading のオプションを問い合わせたり、変
      更したりします。

      *kw* が与えられなかった場合は、見出しのオプション値の辞書が返さ
      れます。 *option* が指定されている場合は、 *option* の値が返され
      ます。それ以外の場合は、オプションに値を設定します。

      設定できるオプションとその値は次の通りです:

      *text*: テキスト
         カラムの見出しに表示するテキスト。

      *image*: 画像名
         カラムの見出しの右に表示する画像を指定します。

      *anchor*: アンカー
         見出しのテキストをどう配置するかを指定します。標準の Tk
         anchor の値です。

      *command*: コールバック
         見出しラベルがクリックされたときに実行されるコールバックです
         。

      ツリーカラムの見出しの設定を行うには、 column = "#0" を付けてこ
      のメソッドを呼び出してください。

   identify(component, x, y)

      *x* *y* で与えられた場所にある指定された *component* の説明を返
      します。その場所に指定された *component* が無い場合は空文字列を
      返します。 (訳注: component には "region", "item", "column",
      "row", "element" が指定でき、それぞれ "cell", "heading" などの場
      所の名前、要素の識別子、 #n という形式のカラム名、その行にある要
      素の識別子、 "text", "padding" などの画面構成要素の名前を返しま
      す。)

   identify_row(y)

      y 座標が *y* の位置にある要素の識別子を返します。

   identify_column(x)

      位置 *x* にあるセルの表示カラム識別子を返します。

      ツリーカラムは #0 という識別子を持ちます。

   identify_region(x, y)

      以下のうち 1 つを返します:

      +-------------+----------------------------------------+
      | region      | 意味                                   |
      |=============|========================================|
      | heading     | ツリーの見出し領域                     |
      +-------------+----------------------------------------+
      | separator   | 2 つのカラム見出しの間のスペース       |
      +-------------+----------------------------------------+
      | tree        | ツリーの領域                           |
      +-------------+----------------------------------------+
      | cell        | データセル                             |
      +-------------+----------------------------------------+

      使用可能バージョン: Tk 8.6

   identify_element(x, y)

      *x* *y* の位置にある画面構成要素の名前を返します。

      使用可能バージョン: Tk 8.6

   index(item)

      親要素の子要素リストの中での *item* のインデックスを返します。

   insert(parent, index, iid=None, **kw)

      新しい要素を作り、その要素の識別子を返します。

      *parent* は親となる要素の識別子で、空文字列にすると新しい要素を
      最上位に作成します。 *index* は整数もしくは "end" という値で、そ
      れによって親要素の子要素リストのどこに新しい要素を挿入するかを指
      定します。 *index* が 0 以下だった場合は、新しい要素は先頭に挿入
      されます; *index* が現在の子要素の数以上だった場合は末尾に挿入さ
      れます。 *iid* が指定された場合は、要素の識別子として使われます;
      *iid* はまだツリーに存在していないものに限ります。それ以外の場合
      は、一意な識別子が生成されます。

      指定できるオプションの一覧は Item Options を参照してください。

   item(item, option=None, **kw)

      指定された *item* のオプションを問い合わせたり、変更したりします
      。

      オプションが与えられなかった場合は、要素のオプションと値が辞書の
      形で返されます。 *option* が指定された場合は、そのオプションの値
      が返されます。それ以外の場合は、 *kw* で与えられたようにオプショ
      ンに値が設定されます。

   move(item, parent, index)

      *item* を *parent* の子要素リストの *index* の位置に移動します。

      要素を自身の子孫の下に移動させるのは許されていません。 *index*
      が 0 以下の場合、 *item* は先頭に移動されます; 子要素の数以上だ
      った場合、末尾に移動されます。 *item* が切り離された状態の場合は
      、再度取り付けられます。

      "reattach()" は "move()" の別名です。

   next(item)

      *item* の 1 つ下の兄弟の識別子を、 *item* が親にとって一番下の子
      供だった場合 '' を返します。

   parent(item)

      *item* の親の識別子を、 *item* が階層の最上位にいた場合 '' を返
      します。

   prev(item)

      *item* の 1 つ上の兄弟の識別子を、 *item* が親にとって一番上の子
      供だった場合 '' を返します。

   see(item)

      *item* を見える状態にします。

      *item* の全ての祖先の "open" オプションを "True" にし、必要であ
      れば *item* がツリーの見える範囲に来るようにウィジェットをスクロ
      ールさせます。

   selection()

      選択されている要素をタプルで返します。

      バージョン 3.8 で変更: "selection()" は引数を受け取らなくなりま
      した。 選択状態を変更するには、以下の選択用メソッドを使用してく
      ださい。

   selection_set(*items)

      新しく選択状態の要素が *items* になります。

      バージョン 3.6 で変更: *items* は 1 つのタプルとしてだけでなく、
      別々の引数としても渡せます。

   selection_add(*items)

      選択状態の要素として *items* を追加します。

      バージョン 3.6 で変更: *items* は 1 つのタプルとしてだけでなく、
      別々の引数としても渡せます。

   selection_remove(*items)

      選択状態の要素から *items* を取り除きます。

      バージョン 3.6 で変更: *items* は 1 つのタプルとしてだけでなく、
      別々の引数としても渡せます。

   selection_toggle(*items)

      *items* のそれぞれの要素の選択状態を入れ替えます。

      バージョン 3.6 で変更: *items* は 1 つのタプルとしてだけでなく、
      別々の引数としても渡せます。

   set(item, column=None, value=None)

      1 引数で呼び出された場合、指定された *item* のカラムと値のペアか
      らなる辞書を返します。 2 引数で呼び出された場合、指定された
      *column* の現在の値を返します。 3 引数で呼び出された場合、与えら
      れた *item* の *column* を指定された値 *value* に設定します。

   tag_bind(tagname, sequence=None, callback=None)

      与えられたイベント *sequence* 用のコールバックをタグ *tagname*
      にバインドします。イベントが要素に渡ってきたときに、要素の tags
      オプションのそれぞれのコールバックが呼び出されます。

   tag_configure(tagname, option=None, **kw)

      指定された *tagname* のオプションを問い合わせたり、変更したりし
      ます。

      *kw* が与えられなかった場合、 *tagname* のオプション設定を辞書の
      形で返します。 *option* が指定された場合、指定された *tagname*
      の *option* の値を返します。それ以外の場合、与えられた *tagname*
      のオプションに値を設定します。

   tag_has(tagname, item=None)

      *item* を指定した場合、その *item* に *tagname* のタグがあれば
      "True" を、なければ "False" を返します。 *item* を指定しなければ
      、指定されたタグを持つすべての要素をタプルで返します。

      使用可能バージョン: Tk 8.6

   xview(*args)

      ツリービューの水平方向の位置を問い合わせたり、変更したりします。

   yview(*args)

      ツリービューの垂直方向の位置を問い合わせたり、変更したりします。


Ttk のスタイル設定
==================

"ttk" の各ウィジェットにはスタイルが割り当てられています。 スタイルは
、ウィジェットを構成する要素とその配置、および要素のオプションの動的な
設定とデフォルト設定を指定します。 スタイル名はデフォルトでウィジェッ
トのクラス名と同じですが、ウィジェットの "style" オプションで上書きで
きます。 ウィジェットのクラス名が分からない場合は、"Misc.winfo_class"
メソッド ("somewidget.winfo_class()") を使用してください。

参考:

  Tk テーマエンジン入門
     "ttk::intro" の man ページでは、テーマエンジンの仕組みを説明して
     います。

  The Tile Widget Set
     テーマエンジン (当時は独立した *Tile* 拡張) を紹介した Joe
     English による 2004 年の論文です。 要素とレイアウトがウィジェット
     の外観を構成する仕組みを図解しています。

class tkinter.ttk.Style

   このクラスはスタイルデータベースを操作するために使われます。

   configure(style, query_opt=None, **kw)

      *style* の指定されたオプションのデフォルト値を問い合わせたり、設
      定したりします。

      *kw* のそれぞれのキーはオプション名で値はそのオプションの値の文
      字列です。

      例えば、全てのデフォルトのボタンをパディングのある平らな見た目に
      し、背景の色を変更するには以下のようにします:

         from tkinter import ttk
         import tkinter

         root = tkinter.Tk()

         ttk.Style().configure("TButton", padding=6, relief="flat",
            background="#ccc")

         btn = ttk.Button(text="Sample")
         btn.pack()

         root.mainloop()

   map(style, query_opt=None, **kw)

      *style* の指定されたオプションの動的な値を問い合わせたり、設定し
      たりします。

      *kw* のそれぞれのキーはオプション名で、値はタプルやリストや何か
      他のお好みのものでグループ化された状態仕様 (statespec) を要素と
      するリストやタプルです。状態仕様は 1 つもしくは複数の状態と値の
      組み合わせです。

      以下のように、例を示す方がわかりやすいでしょう:

         import tkinter
         from tkinter import ttk

         root = tkinter.Tk()

         style = ttk.Style()
         style.map("C.TButton",
             foreground=[('pressed', 'red'), ('active', 'blue')],
             background=[('pressed', '!disabled', 'black'), ('active', 'white')]
             )

         colored_btn = ttk.Button(text="Test", style="C.TButton").pack()

         root.mainloop()

      あるオプションに対する状態と値の組 (states, value) の並び順はス
      タイルに影響を与えることに注意してください。例えば、foreground
      オプションの順序を "[('active', 'blue'), ('pressed', 'red')]" に
      変更した場合、ウィジェットがアクティブもしくは押された状態のとき
      前面が青くなります。

      設定する値を指定せずにマッピングを問い合わせると、各オプションを
      状態仕様 (statespec) のリストに対応付ける辞書を返します。

      バージョン 3.10 で変更: マッピングを問い合わせたときの戻り値を訂
      正しました。

   lookup(style, option, state=None, default=None)

      *style* の指定された *option* の値を返します。

      *state* を指定する場合は、1 つ以上の状態名の並びである必要があり
      ます。 *default* 引数が指定されていた場合は、オプション指定が見
      付からなかったときに代わりに返される値として使われます。

      デフォルトでボタンがどのフォントを使うかを調べるには、以下のよう
      に実行します:

         from tkinter import ttk

         print(ttk.Style().lookup("TButton", "font"))

   layout(style, layoutspec=None)

      与えられた *style* でのウィジェットのレイアウトを定義します。
      *layoutspec* が省略されていた場合は、与えられたスタイルのレイア
      ウト仕様を返します。

      *layoutspec* を指定する場合は、リストもしくは (文字列を除いた)
      何か他のシーケンス型である必要があります。それぞれの要素はタプル
      で、レイアウト名を 1 番目の要素とし、2 番目の要素は Layouts で説
      明されているフォーマットである必要があります。

      形式を理解するには、以下の例を参照してください。 この例は実用的
      な処理を行うためのものではありません。

         from tkinter import ttk
         import tkinter

         root = tkinter.Tk()

         style = ttk.Style()
         style.layout("TMenubutton", [
            ("Menubutton.background", None),
            ("Menubutton.button", {"children":
                [("Menubutton.focus", {"children":
                    [("Menubutton.padding", {"children":
                        [("Menubutton.label", {"side": "left", "expand": 1})]
                    })]
                })]
            }),
         ])

         mbtn = ttk.Menubutton(text='Text')
         mbtn.pack()
         root.mainloop()

   element_create(elementname, etype, *args, **kw)

      現在のテーマに、指定された *etype* の新しい要素を作成します。
      *etype* は "image"、"from"、"vsapi" のいずれかである必要がありま
      す。 "vsapi" は Windows の Tk 8.6 でのみ使用できます。

      "image" が使われた場合、 *args* はデフォルトの画像名の後ろに状態
      仕様と値のペア (これが画像仕様です) を並べたものである必要があり
      ます。 *kw* には以下のオプションが指定できます:

      border=padding
         padding は 4 個以下の整数のリストで、それぞれ左、上、右、下の
         縁の幅を指定します。

      height=height
         要素の最小の高さを指定します。0 より小さい場合は、画像の高さ
         をデフォルトとして使用します。

      padding=padding
         要素の内部のパディングを指定します。指定されない場合は、
         border の値がデフォルトとして使われます。

      sticky=spec
         1 つ外側の枠に対し画像をどう配置するかを指定します。 spec は
         "n", "s", "w", "e" の文字を 0 個以上含みます。

      width=width
         要素の最小の幅を指定します。0 より小さい場合は、画像の幅をデ
         フォルトとして使用します。

      以下はプログラム例です:

         img1 = tkinter.PhotoImage(master=root, file='button.png')
         img1 = tkinter.PhotoImage(master=root, file='button-pressed.png')
         img1 = tkinter.PhotoImage(master=root, file='button-active.png')
         style = ttk.Style(root)
         style.element_create('Button.button', 'image',
                              img1, ('pressed', img2), ('active', img3),
                              border=(2, 4), sticky='we')

      *etype* に "from" を指定すると、"element_create()" は既存の要素
      を複製します。 *args* には複製元のテーマ名を指定し、必要に応じて
      その後に複製元の要素を指定します。 複製元の要素を省略すると空の
      要素が使われます。 *kw* は破棄されます。

      以下はプログラム例です:

         style = ttk.Style(root)
         style.element_create('plain.background', 'from', 'default')

      *etype* に "vsapi" を指定すると、"element_create()" は現在のテー
      マに新しい要素を作成します。 要素の外観は、Windows XP と Vista
      のテーマ付きスタイルを担う Microsoft Visual Styles API で描画さ
      れます。 *args* には Microsoft のドキュメントに記載された Visual
      Styles のクラスとパーツを指定します。 その後に、ttk の状態とそれ
      に対応する Visual Styles API の状態値を組にしたタプルのシーケン
      スを指定することもできます。 *kw* には以下のオプションを指定でき
      ます:

      padding=padding
         要素の内部のパディングを指定します。 *padding* は 4 個以下の
         整数のリストで、それぞれ左、上、右、下のパディングの量を指定
         します。 4 個未満の場合、下は上、右は左、上は左の値がデフォル
         トになります。 つまり、3 個の数値なら左・上下・右、2 個なら左
         右・上下のパディングを指定し、1 個ならウィジェットの周囲すべ
         てに同じパディングを指定します。 このオプションは他のオプショ
         ンと併用できません。

      margins=padding
         要素の外側のパディングを指定します。 *padding* は 4 個以下の
         整数のリストで、それぞれ左、上、右、下のパディングの量を指定
         します。 このオプションは他のオプションと併用できません。

      width=width
         要素の幅を指定します。 このオプションを設定すると、パーツの推
         奨サイズを Visual Styles API に問い合わせなくなります。 この
         オプションを設定する場合は *height* も設定する必要があります
         。 *width* と *height* のオプションは、*padding* や *margins*
         のオプションと併用できません。

      height=height
         要素の高さを指定します。 *width* の説明を参照してください。

      以下はプログラム例です:

         style = ttk.Style(root)
         style.element_create('pin', 'vsapi', 'EXPLORERBAR', 3, [
                              ('pressed', '!selected', 3),
                              ('active', '!selected', 2),
                              ('pressed', 'selected', 6),
                              ('active', 'selected', 5),
                              ('selected', 4),
                              ('', 1)])
         style.layout('Explorer.Pin',
                      [('Explorer.Pin.pin', {'sticky': 'news'})])
         pin = ttk.Checkbutton(style='Explorer.Pin')
         pin.pack(expand=True, fill='both')

      バージョン 3.13 で変更: "vsapi" 要素ファクトリへの対応を追加しま
      した。

   element_names()

      現在のテーマに定義されている要素をタプルで返します。

   element_options(elementname)

      *elementname* のオプションをタプルで返します。

   theme_create(themename, parent=None, settings=None)

      新しいテーマを作成します。

      *themename* が既に存在していた場合はエラーになります。 *parent*
      が指定されていた場合は、新しいテーマは親テーマからスタイルや要素
      やレイアウトを継承します。 *settings* が指定された場合は、
      "theme_settings()" で使われるのと同じ形式である必要があります。

   theme_settings(themename, settings)

      一時的に現在のテーマを *themename* に設定し、指定された
      *settings* を適用した後、元のテーマを復元します。

      *settings* のそれぞれのキーはスタイル名で値はさらに 'configure',
      'map', 'layout', 'element create' をキーとして持ち、その値はそれ
      ぞれ "Style.configure()", "Style.map()", "Style.layout()",
      "Style.element_create()" メソッドで指定するのと同じ形式である必
      要があります。

      例として、コンボボックスの default テーマを少し変更してみましょ
      う

         from tkinter import ttk
         import tkinter

         root = tkinter.Tk()

         style = ttk.Style()
         style.theme_settings("default", {
            "TCombobox": {
                "configure": {"padding": 5},
                "map": {
                    "background": [("active", "green2"),
                                   ("!disabled", "green4")],
                    "fieldbackground": [("!disabled", "green3")],
                    "foreground": [("focus", "OliveDrab1"),
                                   ("!disabled", "OliveDrab2")]
                }
            }
         })

         combo = ttk.Combobox().pack()

         root.mainloop()

   theme_names()

      既知のすべてのテーマをタプルで返します。

   theme_use(themename=None)

      *themename* が与えられなかった場合は、現在使用中のテーマ名を返し
      ます。そうでない場合は、現在のテーマを *themename* に設定し、全
      てのウィジェットを再描画し、 <<ThemeChanged>> イベントを発生させ
      ます。


レイアウト
----------

レイアウトは、オプションを持たなければ "None"、持つ場合は要素の配置を
指定するオプションの辞書にできます。 レイアウトの仕組みは pack ジオメ
トリマネージャーの簡略版です。 最初に空間が与えられ、各要素にその一部
の領域が割り当てられます。

設定できるオプションとその値は次の通りです:

*side*: 配置する側
   要素を空間のどちら側に配置するかを指定します; top, right, bottom,
   left のどれか 1 つです。省略された場合は、要素は空間全体を占めます
   。

*sticky*: nswe
   配分された空間の内部に要素をどう配置するかを指定します。

*unit*: 0 または 1
   1 に設定すると、"Widget.identify()" などでは、その要素とすべての子
   孫を単一の要素として扱います。 グリップ付きのスクロールバーのつまみ
   などに使います。

*children*: [サブレイアウト... ]
   要素の内部に配置する要素のリストを指定します。 リスト内の各要素はタ
   プル (または他のシーケンス型) で、1 番目の項目がレイアウト名、2 番
   目の項目が Layout です。


その他のウィジェット
====================

以下のテーマ付きウィジェットも "tkinter.ttk" のウィジェット群に含まれ
ます。 それぞれ従来の "tkinter" の同名ウィジェットに対応するテーマ付き
のウィジェットで、"Widget" の共通メソッドを継承します。

class tkinter.ttk.Button(master=None, **kw)

   テキストラベルや画像を表示し、押されたときにコマンドを実行する Ttk
   の "Button" ウィジェットです。 "tkinter.Button" に対応するテーマ付
   きウィジェットで、"Widget" の共通ウィジェットメソッドを継承します。

   invoke()

      ボタンに関連付けられたコマンドを呼び出し、その結果を返します。

class tkinter.ttk.Checkbutton(master=None, **kw)

   オンとオフが切り替わるブール変数を操作する Ttk の "Checkbutton" ウ
   ィジェットです。 "tkinter.Checkbutton" に対応するテーマ付きウィジェ
   ットで、"Widget" の共通ウィジェットメソッドを継承します。

   invoke()

      ボタンの選択状態と非選択状態を切り替え、ボタンに関連付けられたコ
      マンドを呼び出して、その結果を返します。

class tkinter.ttk.Entry(master=None, widget=None, **kw)

   1 行のテキスト文字列を表示し、ユーザーが編集できる Ttk の "Entry"
   ウィジェットです。 "tkinter.Entry" に対応するテーマ付きウィジェット
   で、"Widget" の共通ウィジェットメソッドと "tkinter.Entry" の編集用
   メソッドを継承します。

   bbox(index)

      指定された *index* の文字のバウンディングボックスを表すタプル
      "(x, y, width, height)" を返します。

      継承した "Misc.bbox()" を隠します。 grid のバウンディングボック
      スを取得するには "grid_bbox()" を使用してください。

   identify(x, y)

      *x* と *y* で指定された位置にある構成要素の名前を返します。 その
      位置に構成要素がなければ空文字列を返します。

   validate()

      入力欄の検証を強制的に実行し、検証が成功すれば "True" を、それ以
      外は "False" を返します。

class tkinter.ttk.Frame(master=None, **kw)

   他のウィジェットをまとめて配置するコンテナとして使う Ttk の "Frame"
   ウィジェットです。 "tkinter.Frame" に対応するテーマ付きウィジェット
   で、"Widget" の共通ウィジェットメソッドを継承します。

class tkinter.ttk.Label(master=None, **kw)

   テキストラベルや画像を表示する Ttk の "Label" ウィジェットです。
   "tkinter.Label" に対応するテーマ付きウィジェットで、"Widget" の共通
   ウィジェットメソッドを継承します。

class tkinter.ttk.Labelframe(master=None, **kw)

   内容の周囲に枠線とタイトルラベルを描くコンテナである Ttk の
   "Labelframe" ウィジェットです。 "tkinter.LabelFrame" に対応するテー
   マ付きウィジェットで、"Widget" の共通ウィジェットメソッドを継承しま
   す。

class tkinter.ttk.Menubutton(master=None, **kw)

   テキストラベルや画像を表示し、押されたときにメニューをポップアップ
   表示する Ttk の "Menubutton" ウィジェットです。
   "tkinter.Menubutton" に対応するテーマ付きウィジェットで、"Widget"
   の共通ウィジェットメソッドを継承します。

class tkinter.ttk.OptionMenu(master, variable, default=None, *values, **kwargs)

   複数の選択肢から 1 つを選ぶメニューをポップアップ表示する
   "Menubutton" である、Ttk の "OptionMenu" ウィジェットです。
   *variable* は現在の選択値を保持する変数、*default* は初期値、
   *values* はメニューに表示する項目です。 キーワード引数 *command* に
   は、選択が変わるたびに選択値を引数として呼び出す呼び出し可能オブジ
   ェクトを指定できます。 キーワード引数 *style* は内部のメニューボタ
   ンのスタイルを設定します。 キーワード引数 *direction* はメニューボ
   タンに対するメニューの表示位置を設定し、"'above'"、"'below'" (デフ
   ォルト)、"'left'"、"'right'"、"'flush'" のいずれかです。 キーワード
   引数 *name* は Tk のウィジェット名を設定します。

   set_menu(default=None, *values)

      メニューの項目を *values* で置き換えます。 *default* を指定した
      場合は、*variable* の現在の値もその値に設定します。

   destroy()

      このウィジェットと関連付けられたメニューを破棄します。

   バージョン 3.14 で変更: キーワード引数 *name* への対応を追加しまし
   た。

class tkinter.ttk.Panedwindow(master=None, **kw)

   複数の子ウィンドウを縦または横に並べて表示する Ttk の "Panedwindow"
   ウィジェットです。 ユーザーはペイン間の仕切りをドラッグして、子ウィ
   ンドウのサイズの比率を調整できます。 "tkinter.PanedWindow" に対応す
   るテーマ付きウィジェットで、"Widget" の共通ウィジェットメソッドと、
   "tkinter.PanedWindow" の "add()" および "panes()" メソッドを継承し
   ます。

   insert(pos, child, **kw)

      *child* を含むペインを位置 *pos* に挿入します。 *pos* は文字列
      "'end'"、整数インデックス、管理下の子ウィンドウの名前のいずれか
      です。 *child* がすでにこのペインウィンドウの管理下にあれば、指
      定された位置に移動します。 キーワード引数でペインのオプションを
      設定します。

   forget(child)

      *child* をペインから取り除きます。 *child* には整数インデックス
      、または管理下の子ウィンドウの名前を指定できます。

      このメソッドは、継承したジオメトリマネージャーの "forget()" を隠
      します。 ウィジェット自体をマネージャーの管理対象から外すには、
      "pack_forget()"、"grid_forget()"、"place_forget()" を使ってくだ
      さい。

   pane(pane, option=None, **kw)

      指定された *pane* のオプションを問い合わせたり変更したりします。
      *pane* は整数インデックス、または管理下の子ウィンドウの名前です
      。 オプションを指定しなければ、ペインのオプション値の辞書を返し
      ます。 *option* を指定した場合は、そのオプションの値を返します。
      それ以外の場合は、キーワード引数で指定されたオプションを対応する
      値に設定します。

   sashpos(index, newpos=None)

      *newpos* を指定した場合、番号 *index* の仕切りの位置を設定し、新
      しい位置を返します。 位置が単調増加するように、隣接する仕切りの
      位置も調整されることがあります。 位置は 0 からウィジェットの全体
      サイズまでの範囲にも制限されます。 *newpos* を省略した場合は、仕
      切りの現在の位置を返します。

class tkinter.ttk.Radiobutton(master=None, **kw)

   グループを構成し、互いに排他的な複数の値から 1 つを選んで共有の単一
   変数を操作する Ttk の "Radiobutton" ウィジェットです。
   "tkinter.Radiobutton" に対応するテーマ付きウィジェットで、"Widget"
   の共通ウィジェットメソッドを継承します。

   invoke()

      "variable" オプションで関連付けた変数をボタンの値に設定してボタ
      ンを選択状態にし、ボタンに関連付けられたコマンドを呼び出して、そ
      の結果を返します。

class tkinter.ttk.Scale(master=None, **kw)

   スライダーを溝に沿って動かし、ある範囲から数値を選択できる Ttk の
   "Scale" ウィジェットです。 "tkinter.Scale" に対応するテーマ付きウィ
   ジェットで、"Widget" の共通ウィジェットメソッドを継承します。

   configure(cnf=None, **kw)

      Modify or query the widget options, like "Widget.configure". In
      addition, this method clips the "from" and "to" values so that
      the current value stays within the range defined by them.

      バージョン 3.9 で変更: "Widget.configure" と同じように設定値を返
      すようになりました。

   get(x=None, y=None)

      スケールの現在の値を返します。 *x* と *y* を指定した場合は、代わ
      りにピクセル座標 *x*、*y* に対応する値を返します。

class tkinter.ttk.Scrollbar(master=None, **kw)

   "Treeview"、"Entry"、"tkinter.Text" など、関連付けられたスクロール
   可能なウィジェットの表示範囲を操作する Ttk の "Scrollbar" ウィジェ
   ットです。 "tkinter.Scrollbar" に対応するテーマ付きウィジェットで、
   "Widget" の共通ウィジェットメソッドと、"tkinter.Scrollbar" の
   "set()" および "get()" メソッドを継承します。

class tkinter.ttk.Separator(master=None, **kw)

   水平または垂直の区切り線を表示する Ttk の "Separator" ウィジェット
   です。 "tkinter" には直接対応するウィジェットがなく、"Widget" の共
   通ウィジェットメソッドを継承します。

class tkinter.ttk.Sizegrip(master=None, **kw)

   通常は右下隅に配置され、押してドラッグすることで、配置先のトップレ
   ベルウィンドウのサイズを変更できるグリップを表示する Ttk の
   "Sizegrip" ウィジェットです。 "tkinter" には直接対応するウィジェッ
   トがなく、"Widget" の共通ウィジェットメソッドを継承します。

class tkinter.ttk.LabeledScale(master=None, variable=None, from_=0, to=10, **kw)

   "Scale" と、その現在の値を表示する "Label" を含む "Frame" です。
   *variable* はスケールの値を保持する "IntVar" です (指定しなければ新
   しく作成されます)。 *from_* と *to* はスケールの範囲を定義します。

   destroy()

      このウィジェットを破棄し、関連付けられた変数に登録したトレースコ
      ールバックを取り除きます。

class tkinter.ttk.LabelFrame(master=None, **kw)

   "Labelframe" の別名で、"tkinter.LabelFrame" との名前の互換性を保つ
   ために用意されています。

class tkinter.ttk.PanedWindow(master=None, **kw)

   "Panedwindow" の別名で、"tkinter.PanedWindow" との名前の互換性を保
   つために用意されています。
