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

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

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

"tkinter.ttk" モジュールは Tk 8.5 で導入された Tk のテーマ付きウィジェ
ットへのアクセスを提供します。これは X11 上のフォントのアンチエイリア
スや透過ウィンドウ (X11 ではコンポジションウィンドウマネージャが必要で
す) を含む、さらなる利点を提供します。

"tkinter.ttk" の基本的なアイディアは、拡張可能性のためにウィジェットの
動作を実装するコードと見た目を記述するコードを分離することです。

参考:

  Tk Widget Styling Support
     Tk のテーマサポートを紹介するドキュメント


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

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

   from tkinter import ttk

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

   from tkinter import *
   from tkinter.ttk import *

このように書くと、いくつかの "tkinter.ttk" ウィジェット ("Button",
"Checkbutton", "Entry", "Frame", "Label", "LabelFrame", "Menubutton",
"PanedWindow", "Radiobutton", "Scale", "Scrollbar") は自動的に Tk ウィ
ジェットを置き換えます。

これにはプラットフォームをまたいでより良い見た目を得られるという、直接
的な利益がありますが、ウィジェットは完全な互換性を持っているわけではあ
りません。一番の違いは "fg" や "bg" やその他のスタイルに関係するウィジ
ェットのオプションが Ttk ウィジェットから無くなっていることです。同じ
(もしくはより良い) 見た目にするためには "ttk.Style" を使ってください。

参考:

  Converting existing applications to use Tile widgets
     アプリケーションを移行して新しいウィジェットを使用する際に出くわ
     す典型的な差異について (Tcl の用語を使って) 書かれている研究論文


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 のテーマ付きウィジェットがサポートしている標準のオプ
ションやメソッドを定義するもので、これを直接インスタンス化するものでは
ありません。


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

All the "ttk" Widgets accept the following options:

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


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

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

+------------------+-----------------------------------------------------------+
| オプション       | 説明                                                      |
|==================|===========================================================|
| xscrollcommand   | 水平方向のスクロールバーとのやり取りに使われます。  ウィ  |
|                  | ジェットのウィンドウが再描画されたとき, ウィジェットは    |
|                  | scrollcommand に基いて Tcl コマンドを生成します。  通常こ |
|                  | のオプションにはあるスクロールバーのメソッド              |
|                  | "Scrollbar.set()" が設定されます。こうすると、ウィンドウ  |
|                  | の見た目が変わったときにスクロー ルバーの状態も更新されま |
|                  | す。                                                      |
+------------------+-----------------------------------------------------------+
| yscrollcommand   | 垂直方向のスクロールバーとのやり取りに使われます。詳しく  |
|                  | は、上記を参照 してください。                             |
+------------------+-----------------------------------------------------------+


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

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

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

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


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

"ttk.Combobox" ウィジェットはテキストフィールドと値のポップダウンリス
トを結び付けます。このウィジェットは "Entry" の子クラスです。

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


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

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

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


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

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


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

class tkinter.ttk.Combobox

   current(newindex=None)

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

   get()

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

   set(value)

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


Spinbox
=======

The "ttk.Spinbox" widget is a "ttk.Entry" enhanced with increment and
decrement arrows.  It can be used for numbers or lists of string
values. This widget is a subclass of "Entry".

"Widget" から継承したメソッド: "Widget.cget()", "Widget.configure()",
"Widget.identify()", "Widget.instate()", "Widget.state()" と、以下の
"Entry" から継承したメソッド: "Entry.bbox()", "Entry.delete()",
"Entry.icursor()", "Entry.index()", "Entry.insert()", "Entry.xview()"
に加え、このクラスには "ttk.Spinbox" で説明するいくつかのメソッドがあ
ります。


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

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

+------------------------+--------------------------------------------------------+
| オプション             | 説明                                                   |
|========================|========================================================|
| from                   | Float value.  If set, this is the minimum value to     |
|                        | which the decrement button will decrement.  Must be    |
|                        | spelled as "from_" when used as an argument, since     |
|                        | "from" is a Python keyword.                            |
+------------------------+--------------------------------------------------------+
| to                     | Float value.  If set, this is the maximum value to     |
|                        | which the increment button will increment.             |
+------------------------+--------------------------------------------------------+
| increment              | Float value.  Specifies the amount which the           |
|                        | increment/decrement buttons change the value. Defaults |
|                        | to 1.0.                                                |
+------------------------+--------------------------------------------------------+
| "values"               | Sequence of string or float values.  If specified, the |
|                        | increment/decrement buttons will cycle through the     |
|                        | items in this sequence rather than incrementing or     |
|                        | decrementing numbers.                                  |
+------------------------+--------------------------------------------------------+
| wrap                   | Boolean value.  If "True", increment and decrement     |
|                        | buttons will cycle from the "to" value to the "from"   |
|                        | value or the "from" value to the "to" value,           |
|                        | respectively.                                          |
+------------------------+--------------------------------------------------------+
| format                 | String value.  This specifies the format of numbers    |
|                        | set by the increment/decrement buttons.  It must be in |
|                        | the form "%W.Pf", where W is the padded width of the   |
|                        | value, P is the precision, and '%' and 'f' are         |
|                        | literal.                                               |
+------------------------+--------------------------------------------------------+
| command                | Python callable.  Will be called with no arguments     |
|                        | whenever either of the increment or decrement buttons  |
|                        | are pressed.                                           |
+------------------------+--------------------------------------------------------+


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

The spinbox widget generates an **<<Increment>>** virtual event when
the user presses <Up>, and a **<<Decrement>>** virtual event when the
user presses <Down>.


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

class tkinter.ttk.Spinbox

   get()

      Returns the current value of the spinbox.

   set(value)

      Sets the value of the spinbox to *value*.


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

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


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

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

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


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

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

+-------------+----------------------------------------------------------------+
| オプション  | 説明                                                           |
|=============|================================================================|
| state       | "normal", "disabled", "hidden" のうちどれか 1 つです。         |
|             | "disabled" の場 合、タブは選択することができません。 "hidden"  |
|             | の場合、タブは表示されま せん。                                |
+-------------+----------------------------------------------------------------+
| sticky      | ペイン領域の中に子ウィンドウがどう置かれるかを指定します。指定 |
|             | する値は "n", "s", "e", "w" からなる 0 文字以上の文字列です。  |
|             | 配置マネージャの "grid()" と同様に、それぞれの文字は子ウィンド |
|             | ウが (北、南、東、西の) どの辺に対して追随するかに対応していま |
|             | す。                                                           |
+-------------+----------------------------------------------------------------+
| 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* で指定されたタブを削除します。関連付けられていたウィン
      ドウは切り離され、管理対象でなくなります。

   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) 決定的モードでは、全ての処理
の総量のうち完了した量を表示します。 2) 非決定的モードでは、今作業が進
んでいることをユーザに示します。


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

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

+------------+-----------------------------------------------------------------+
| オプション | 説明                                                            |
|============|=================================================================|
| 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" を追加しても問題ありません。


バグ
----

* このウィジェットを含む最上位のウィンドウの位置がスクリーンの右端や下
  端に対して相対的に指定されている場合 (例: ....) 、 "Sizegrip" ウィジ
  ェットはウィンドウのサイズ変更をしません。

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


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

"ttk.Treeview" ウィジェットは階層のある要素 (アイテム) の集まりを表示
します。それぞれの要素はテキストラベル、オプションの画像、オプションの
データのリストを持っています。データはラベルの後に続くカラムに表示され
ます。

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

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

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

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


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

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

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


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

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

+----------+-----------------------------------------------------------------+
| オプショ | 説明                                                            |
| ン       |                                                                 |
|==========|=================================================================|
| text     | アイテムに表示するテキストラベルです。                          |
+----------+-----------------------------------------------------------------+
| image    | ラベルの左に表示される Tk 画像です。                            |
+----------+-----------------------------------------------------------------+
| "values" | 要素に関連付けられている値のリストです。  それぞれの要素はウィ  |
|          | ジェットの columns オプションと同じ数の値を持たな ければいけま  |
|          | せん。 columns オプションより少ない場合、残りの値は空とし て扱  |
|          | われます。 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* が見えなくなっている場合は、空文字列が
      返されます。

   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*: One of the standard Tk anchor values.
         このカラムでセルに対してテキストをどう配置するかを指定します
         。

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

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

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

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

   delete(*items)

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

      ルート要素は削除されません。

   detach(*items)

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

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

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

   exists(item)

      指定された *item* がツリーの中にあれば "True" を返します。

   focus(item=None)

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

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

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

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

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

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

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

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

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

      ツリーカラムの見出しの設定を行うには、 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 座標が *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* はまだツリーに存在していないものに限ります。それ以外の場合
      は、一意な識別子が生成されます。

      See Item Options for the list of available options.

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

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

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

   move(item, parent, index)

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

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

   next(item)

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

   parent(item)

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

   prev(item)

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

   reattach(item, parent, index)

      "Treeview.move()" のエイリアスです。

   see(item)

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

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

   selection()

      Returns a tuple of selected items.

      バージョン 3.8 で変更: "selection()" no longer takes arguments.
      For changing the selection state use the following selection
      methods.

   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* を持っているかどうかに従って 1 または 0 が返されます。
      そうでない場合、指定されたタグを持つ全ての要素のリストを返します
      。

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

   xview(*args)

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

   yview(*args)

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


Ttk スタイル
============

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

参考:

  Tcl'2004 conference のプレゼンテーション
     この文書ではテーマエンジンがどう動くかを説明しています

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')]" に
      変更した場合、ウィジェットがアクティブもしくは押された状態のとき
      前面が青くなります。

   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)

      Create a new element in the current theme, of the given *etype*
      which is expected to be either "image", "from" or "vsapi". The
      latter is only available in Tk 8.6 on Windows.

      "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')

      If "vsapi" is used as the value of *etype*, "element_create()"
      will create a new element in the current theme whose visual
      appearance is drawn using the Microsoft Visual Styles API which
      is responsible for the themed styles on Windows XP and Vista.
      *args* is expected to contain the Visual Styles class and part
      as given in the Microsoft documentation followed by an optional
      sequence of tuples of ttk states and the corresponding Visual
      Styles API state value. *kw* may have the following options:

      padding=padding
         Specify the element's interior padding. *padding* is a list
         of up to four integers specifying the left, top, right and
         bottom padding quantities respectively. If fewer than four
         elements are specified, bottom defaults to top, right
         defaults to left, and top defaults to left. In other words, a
         list of three numbers specify the left, vertical, and right
         padding; a list of two numbers specify the horizontal and the
         vertical padding; a single number specifies the same padding
         all the way around the widget. This option may not be mixed
         with any other options.

      margins=padding
         Specifies the elements exterior padding. *padding* is a list
         of up to four integers specifying the left, top, right and
         bottom padding quantities respectively. This option may not
         be mixed with any other options.

      width=width
         Specifies the width for the element. If this option is set
         then the Visual Styles API will not be queried for the
         recommended size or the part. If this option is set then
         *height* should also be set. The *width* and *height* options
         cannot be mixed with the *padding* or *margins* options.

      height=height
         Specifies the height of the element. See the comments for
         *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 で変更: Added support of the "vsapi" element
      factory.

   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>> イベントを発生させ
      ます。


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

A layout can be just "None", if it takes no options, or a dict of
options specifying how to arrange the element. The layout mechanism
uses a simplified version of the pack geometry manager: given an
initial cavity, each element is allocated a parcel.

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

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

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

*unit*: 0 or 1
   1 に設定されると、 "Widget.identify()" などには要素とその子で単一の
   要素として扱われます。これは、グリップのついたスクロールバーサムの
   ようなものに使われます。

*children*: [sublayout... ]
   要素の内部に配置する要素のリストを指定します。リストのそれぞれの要
   素はタプル (もしくは他のシーケンス型) で、それの 1 番目の要素はレイ
   アウト名でそれ以降は Layout です。
