:mod:`ttk` --- Tk themed widgets
================================

.. module:: ttk
   :synopsis: Tk themed widget set
.. sectionauthor:: Guilherme Polo <ggpolo@gmail.com>


.. index:: single: ttk

:mod:`ttk` モジュールは Tk 8.5 で導入された Tk のテーマ付きウィジェットへのアクセスを提供します。
Tk 8.5 が無い環境で Python がコンパイルされていた場合でも、 Tile がインストールされていればこのモジュールはそれを使おうとします。
しかし、 X11 上のフォントのアンチエイリアスや透過ウィンドウ (X11 ではコンポジションウィンドウマネージャが必要です) などの新しい Tk が提供している機能は使えません。

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

.. seealso::

   `Tk Widget Styling Support <http://www.tcl.tk/cgi-bin/tct/tip/48>`_
      Tk のテーマサポートの立ち上げのドキュメント


Ttk を使う
----------

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

   import ttk

しかしこのようなコードでは
::

   from Tkinter import *

このように使いたいことがあるかもしれません
::

   from Tkinter import *
   from ttk import *

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

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

.. seealso::

   `Converting existing applications to use the Tile widgets <http://tktable.sourceforge.net/tile/doc/converting.txt>`_
     Tcl において、アプリケーションを新しいウィジェットに移行するときに出てくる典型的な差異について書かれているテキスト


Ttk ウィジェット
----------------

Ttk には 17 のウィジェットがあり、そのうち 11 は Tkinter に既にあるものです:
:class:`Button`, :class:`Checkbutton`, :class:`Entry`, :class:`Frame`,
:class:`Label`, :class:`LabelFrame`, :class:`Menubutton`,
:class:`PanedWindow`, :class:`Radiobutton`, :class:`Scale`,
:class:`Scrollbar` 。
新しい 6 つのウィジェットクラスは次のものです: :class:`Combobox`,
:class:`Notebook`, :class:`Progressbar`, :class:`Separator`,
:class:`Sizegrip`, :class:`Treeview` 。
これらのクラスは全て :class:`Widget` の子クラスです。

上にも書いた通り、スタイルの記述コードと同様に見た目も変わっていることに気付くでしょう。
それを見せるために、非常に簡単な例を以下に示します。

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_ についての情報は :class:`Style` クラスの文書を読んでください。

ウィジェット
------------

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


標準オプション
^^^^^^^^^^^^^^

全ての :mod:`ttk` ウィジェットは以下のオプションを受け付けます:

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


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

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

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


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

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

.. tabularcolumns:: |p{0.2\textwidth}|p{0.7\textwidth}|
..

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


互換性オプション
^^^^^^^^^^^^^^^^

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

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

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

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


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

ttk.Widget
^^^^^^^^^^

以下に書かれているメソッドに加えて、 :class:`ttk.Widget` クラスは
:meth:`Tkinter.Widget.cget` メソッドと :meth:`Tkinter.Widget.configure` メソッドをサポートしています。

.. class:: Widget

   .. method:: identify(x, y)

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

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


   .. method:: instate(statespec[, callback=None[, *args[, **kw]]])

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


   .. method:: state([statespec=None])

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

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


コンボボックス
--------------

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

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

オプション
^^^^^^^^^^

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

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


仮想イベント
^^^^^^^^^^^^

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


ttk.Combobox
^^^^^^^^^^^^

.. class:: Combobox

   .. method:: current([newindex=None])

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


   .. method:: get()

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


   .. method:: set(value)

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


ノートブック
------------

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


オプション
^^^^^^^^^^

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

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


タブオプション
^^^^^^^^^^^^^^

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

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


タブ識別子
^^^^^^^^^^

:class:`ttk.Notebook` のいくつかのメソッドにある *tab_id* は以下の形式を取ります:

* 0 からタブの数の間の整数。
* 子ウィンドウの名前。
* タブを指し示す "@x,y" という形式の位置指定。
* 現在選択されているタブを指し示すリテラル文字列 "current"。
* タブ数を返すリテラル文字列 "end" (:meth:`Notebook.index` でのみ有効)。


仮想イベント
^^^^^^^^^^^^

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


ttk.Notebook
^^^^^^^^^^^^

.. class:: Notebook

   .. method:: add(child, **kw)

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

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

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


   .. method:: forget(tab_id)

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


   .. method:: hide(tab_id)

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

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


   .. method:: identify(x, y)

      *x* *y* の位置にあるタブの名前を、そこにタブが無ければ空文字列を返します。


   .. method:: index(tab_id)

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


   .. method:: insert(pos, child, **kw)

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

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

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


   .. method:: select([tab_id])

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

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


   .. method:: tab(tab_id[, option=None[, **kw]])

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

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


   .. method:: tabs()

      ノートブックに管理されているウィンドウのリストを返します。


   .. method:: enable_traversal()

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

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

      * Control-Tab: 現在選択されているタブの 1 つ次のタブを選択します。
      * Shift-Control-Tab: 現在選択されているタブの 1 つ前のタブを選択します。
      * Alt-K: K があるタブの (下線が引かれた) ショートカットキーだとして、
        そのタブを選択します。

      ネストしたノートブックも含め、1 つのウィンドウの最上位にある
      複数のノートブックのキーボード移動が可能になることもあります。
      しかしノートブック上の移動は、全てのペインが同じノートブックを親としているときのみ正しく動作します。


プログレスバー
--------------

:class:`ttk.Progressbar` ウィジェットは長く走る処理の状態を表示します。
このウィジェットは 2 つのモードで動作します:
決定的モードでは、全ての処理の総量のうち完了した量を表示します。
非決定的モードでは、今何か処理が行われていることをユーザに示します。


オプション
^^^^^^^^^^

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

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


ttk.Progressbar
^^^^^^^^^^^^^^^

.. class:: Progressbar

   .. method:: start([interval])

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


   .. method:: step([amount])

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

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


   .. method:: stop()

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


セパレータ
----------

:class:`ttk.Separator` ウィジェットは水平もしくは垂直のセパレータを表示します。

:class:`ttk.Widget` から継承したメソッド以外にメソッドを持ちません。


オプション
^^^^^^^^^^

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

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


サイズグリップ
--------------

(グローボックスとしても知られる) :class:`ttk.Sizegrip` ウィジェットは、
押してつまみ部分をドラッグすることで最上位のウィンドウのサイズを変更できます。

このウィジェットは :class:`ttk.Widget` から継承したもの以外のオプションとメソッドを持ちません。


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

* Mac OS X では、最上位のウィンドウにはデフォルトで組み込みのサイズグリップが含まれています。
  組み込みのグリップが :class:`Sizegrip` を隠してしまうので、 :class:`Sizegrip` を追加するのは無害です。


バグ
^^^^

.. memo

   I (cocoatomo) didn't have confidence translations on 

   - relative to the right or bottom of the screen
   - (e.g. ....).

* 最上位のウィンドウの位置がスクリーンに対して右や下に指定されている場合 (などなど....)、
  :class:`Sizegrip` ウィジェットはウィンドウのサイズ変更をしません。
* このウィジェットは "南東" 方向のサイズ変更しかサポートしていません。


ツリービュー
------------

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

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

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

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

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


オプション
^^^^^^^^^^

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

.. note from translator (cocoatomo)

   - tag binding refers tag_bind method
   - 'list' is list in Tcl, which is space-separated strings, not list in Python
   TODO add explanation for list in Tcl

.. tabularcolumns:: |p{0.2\textwidth}|p{0.7\textwidth}|
..

   +----------------+--------------------------------------------------------+
   | オプション     | 説明                                                   |
   +================+========================================================+
   | columns        | カラム数とその名前を指定するカラム識別子のリストです。 |
   +----------------+--------------------------------------------------------+
   | displaycolumns | どのデータカラムをどの順序で表示するかを指定する、     |
   |                | (名前もしくは整数のインデックスの) カラム識別子の      |
   |                | リストか、文字列 "#all" です。                         |
   +----------------+--------------------------------------------------------+
   | height         | 表示する行数を指定します。                             |
   |                | メモ: 表示に必要な幅はカラム幅の合計から決定されます。 |
   +----------------+--------------------------------------------------------+
   | 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       | 要素の子供を表示するか隠すかを指示する真偽値です。           |
   +------------+--------------------------------------------------------------+
   | tags       | この要素に関連付いているタグのリストです。                   |
   +------------+--------------------------------------------------------------+


タグオプション
^^^^^^^^^^^^^^

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

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


カラム識別子
^^^^^^^^^^^^

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

* columns オプションのリストにある名前。
* n 番目のデータカラムを指し示す整数 n 。
* n を整数として n 番目の表示されているカラムを指し示す #n という形式の文字列。

メモ:

* 要素のオプション値は実際に格納されている順序とは違った順序で表示されることがあります。
* show="tree" が指定されていない場合でも、カラム #0 は常にツリーカラムを指しています。

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


仮想イベント
^^^^^^^^^^^^

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

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

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


ttk.Treeview
^^^^^^^^^^^^

.. class:: Treeview

   .. method:: bbox(item[, column=None])

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

      *column* が指定されている場合は、セルのバウンディングボックスを返します。
      (例えば、閉じた状態の要素の子供であったり、枠外にスクロールされていて)
      *item* が見えなくなっている場合は、空文字列が返されます。


   .. method:: get_children([item])

      *item* の子要素のリストを返します。

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


   .. method:: set_children(item, *newchildren)

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

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


   .. method:: column(column[, option=None[, **kw]])

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

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

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

      * id
         カラム名を返します。これは読み取り専用のオプションです。
      * anchor: 標準の Tk anchor の値
         このカラムでセルに対してテキストをどう配置するかを指定します。
      * minwidth: 幅
         カラムの最小幅をピクセル単位で表したものです。
         ツリービューウィジェットは、ウィジェットのサイズが変更されたり
         カラムをユーザがドラッグして移動させたりしたときに、
         このオプションで指定した幅より狭くすることはありません。
      * stretch: True もしくは False
         ウィジェットがサイズ変更されたとき、カラムの幅をそれに合わせるかどうかを指定します。
      * width: 幅
         カラムの幅をピクセル単位で表したものです。

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

   .. method:: delete(*items)

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

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


   .. method:: detach(*items)

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

      The items and all of their descendants are still present, and may be
      reinserted at another point in the tree, but will not be displayed.
      その要素と子孫たちは依然として存在していて、ツリーの別の場所に再度
      挿入することができますが、隠された状態になり表示はされません。

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


   .. method:: exists(item)

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


   .. method:: focus([item=None])

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


   .. method:: heading(column[, option=None[, **kw]])

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

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

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

      * text: テキスト
         カラムの見出しに表示するテキスト。
      * image: 画像名
         カラムの見出しの右に表示する画像を指定します。
      * anchor: anchor
         見出しのテキストをどう配置するかを指定します。標準の Tk anchor の値です。
      * command: コールバック
         見出しラベルがクリックされたときに実行されるコールバックです。

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

   .. method:: identify(component, x, y)

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


   .. method:: identify_row(y)

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


   .. method:: identify_column(x)

      x 座標が *x* の位置にあるセルのデータカラムの識別子を返します。

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


   .. method:: identify_region(x, y)

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

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

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


   .. method:: identify_element(x, y)

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

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


   .. method:: index(item)

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


   .. method:: insert(parent, index[, iid=None[, **kw]])

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

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

      使用できるオプションのリストについては `要素オプション`_ を参照してください。


   .. method:: item(item[, option[, **kw]])

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

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


   .. method:: move(item, parent, index)

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

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


   .. method:: next(item)

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


   .. method:: parent(item)

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


   .. method:: prev(item)

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


   .. method:: reattach(item, parent, index)

      :meth:`Treeview.move` のエイリアスです。


   .. method:: see(item)

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

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


   .. method:: selection([selop=None[, items=None]])

      *selop* が指定されなかった場合は、選択されている要素を返します。
      そうでなければ、以下の選択メソッドに従って動作します。
      (訳注: *selop* には "set", "add", "remove", "toggle" のうち 1 つが指定できます。
      *items* にはそれぞれのメソッドの引数を指定します。)


   .. method:: selection_set(items)

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


   .. method:: selection_add(items)

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


   .. method:: selection_remove(items)

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


   .. method:: selection_toggle(items)

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


   .. method:: set(item[, column=None[, value=None]])

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


   .. method:: tag_bind(tagname[, sequence=None[, callback=None]])

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


   .. method:: tag_configure(tagname[, option=None[, **kw]])

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

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


   .. method:: tag_has(tagname[, item])

      *item* が指定されていた場合、指定された *item* が与えられた *tagname* を
      持っているかどうかに従って 1 または 0 が返されます。
      そうでない場合、指定されたタグを持つ全ての要素のリストを返します。

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


   .. method:: xview(*args)

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


   .. method:: yview(*args)

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


.. _TtkStyling:

Ttk スタイル
------------

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

.. seealso::

   `Tcl'2004 conference presentation <http://tktable.sourceforge.net/tile/tile-tcl2004.pdf>`_
      この文書ではテーマエンジンがどう動くかを説明しています


.. class:: Style

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


   .. method:: configure(style, query_opt=None, **kw)

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

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

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

      ::

         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()


   .. method:: map(style, query_opt=None, **kw)

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

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

      例

      ::

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


   .. method:: lookup(style, option[, state=None[, default=None]])

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

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

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

         import ttk

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


   .. method:: layout(style[, layoutspec=None])

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

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

      フォーマットを理解するために以下の例を見てください
      (何かを使い易くするための例ではありません)
      ::

         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()


   .. method:: element_create(elementname, etype, *args, **kw)

      与えられた *etype* ("image", "from", "vsapi" のいずれか) の現在のテーマに新しい要素を作成します。
      最後の "vsapi" は Windows XP と Vista の Tk 8.6a のみで使用可能でここでは説明しません。

      "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 より小さい場合は、
          画像の幅をデフォルトとして使用します。

      *etype* の値として "from" が使われた場合は、
      :meth:`element_create` が現在の要素を複製します。
      *args* は要素の複製元のテーマの名前と、オプションで複製する要素を含んでいる必要があります。
      複製元の要素が指定されていなかった場合、空要素が使用され、 *kw* は破棄されます。


   .. method:: element_names()

      現在のテーマに定義されている要素のリストを返します。


   .. method:: element_options(elementname)

      *elementname* のオプションのリストを返します。


   .. method:: theme_create(themename[, parent=None[, settings=None]])

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

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


   .. method:: theme_settings(themename, settings)

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

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

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

         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()


   .. method:: theme_names()

      全ての既存のテーマのリストを返します。


   .. method:: theme_use([themename])

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


レイアウト
^^^^^^^^^^

レイアウトはオプションを取らない場合はただの None にできますし、
そうでない場合は要素をどう配置するかを指定するオプションの辞書になります。
レイアウト機構は単純化したジオメトリマネージャを使っています:
最初に空間が与えられ、それぞれの要素に分割された空間が配分されます。
設定できるオプションと値は次の通りです:

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

 * sticky: n, s, w, e から 0 個以上
    配分された空間の内部に要素をどう配置するかを指定します。

 * unit: 0 か 1
    If set to 1, causes the element and all of its descendants to be treated as
    a single element for the purposes of :meth:`Widget.identify` et al. It's
    used for things like scrollbar thumbs with grips.
    1 を設定した場合、要素とその

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

.. _Layout: `レイアウト`_
