|  | :mod:`tkinter.ttk` --- Tk themed widgets | 
|  | ======================================== | 
|  |  | 
|  | .. module:: tkinter.ttk | 
|  | :synopsis: Tk themed widget set | 
|  |  | 
|  | .. sectionauthor:: Guilherme Polo <ggpolo@gmail.com> | 
|  |  | 
|  | **Source code:** :source:`Lib/tkinter/ttk.py` | 
|  |  | 
|  | .. index:: single: ttk | 
|  |  | 
|  | -------------- | 
|  |  | 
|  | The :mod:`tkinter.ttk` module provides access to the Tk themed widget set, | 
|  | introduced in Tk 8.5. If Python has not been compiled against Tk 8.5, this | 
|  | module can still be accessed if *Tile* has been installed.  The former | 
|  | method using Tk 8.5 provides additional benefits including anti-aliased font | 
|  | rendering under X11 and window transparency (requiring a composition | 
|  | window manager on X11). | 
|  |  | 
|  | The basic idea for :mod:`tkinter.ttk` is to separate, to the extent possible, | 
|  | the code implementing a widget's behavior from the code implementing its | 
|  | appearance. | 
|  |  | 
|  |  | 
|  | .. seealso:: | 
|  |  | 
|  | `Tk Widget Styling Support <https://www.tcl.tk/cgi-bin/tct/tip/48>`_ | 
|  | A document introducing theming support for Tk | 
|  |  | 
|  |  | 
|  | Using Ttk | 
|  | --------- | 
|  |  | 
|  | To start using Ttk, import its module:: | 
|  |  | 
|  | from tkinter import ttk | 
|  |  | 
|  | To override the basic Tk widgets, the import should follow the Tk import:: | 
|  |  | 
|  | from tkinter import * | 
|  | from tkinter.ttk import * | 
|  |  | 
|  | That code causes several :mod:`tkinter.ttk` widgets (:class:`Button`, | 
|  | :class:`Checkbutton`, :class:`Entry`, :class:`Frame`, :class:`Label`, | 
|  | :class:`LabelFrame`, :class:`Menubutton`, :class:`PanedWindow`, | 
|  | :class:`Radiobutton`, :class:`Scale` and :class:`Scrollbar`) to | 
|  | automatically replace the Tk widgets. | 
|  |  | 
|  | This has the direct benefit of using the new widgets which gives a better | 
|  | look and feel across platforms; however, the replacement widgets are not | 
|  | completely compatible. The main difference is that widget options such as | 
|  | "fg", "bg" and others related to widget styling are no | 
|  | longer present in Ttk widgets.  Instead, use  the :class:`ttk.Style` class | 
|  | for improved styling effects. | 
|  |  | 
|  |  | 
|  | .. seealso:: | 
|  |  | 
|  | `Converting existing applications to use Tile widgets <http://tktable.sourceforge.net/tile/doc/converting.txt>`_ | 
|  | A monograph (using Tcl terminology) about differences typically | 
|  | encountered when moving applications to use the new widgets. | 
|  |  | 
|  |  | 
|  | Ttk Widgets | 
|  | ----------- | 
|  |  | 
|  | Ttk comes with 17 widgets, eleven of which already existed in tkinter: | 
|  | :class:`Button`, :class:`Checkbutton`, :class:`Entry`, :class:`Frame`, | 
|  | :class:`Label`, :class:`LabelFrame`, :class:`Menubutton`, :class:`PanedWindow`, | 
|  | :class:`Radiobutton`, :class:`Scale` and :class:`Scrollbar`. The other six are | 
|  | new: :class:`Combobox`, :class:`Notebook`, :class:`Progressbar`, | 
|  | :class:`Separator`, :class:`Sizegrip` and :class:`Treeview`. And all them are | 
|  | subclasses of :class:`Widget`. | 
|  |  | 
|  | Using the Ttk widgets gives the application an improved look and feel. | 
|  | As discussed above, there are differences in how the styling is coded. | 
|  |  | 
|  | Tk code:: | 
|  |  | 
|  | l1 = tkinter.Label(text="Test", fg="black", bg="white") | 
|  | l2 = tkinter.Label(text="Test", fg="black", bg="white") | 
|  |  | 
|  |  | 
|  | Ttk code:: | 
|  |  | 
|  | 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") | 
|  |  | 
|  | For more information about TtkStyling_, see the :class:`Style` class | 
|  | documentation. | 
|  |  | 
|  | Widget | 
|  | ------ | 
|  |  | 
|  | :class:`ttk.Widget` defines standard options and methods supported by Tk | 
|  | themed widgets and is not supposed to be directly instantiated. | 
|  |  | 
|  |  | 
|  | Standard Options | 
|  | ^^^^^^^^^^^^^^^^ | 
|  |  | 
|  | All the :mod:`ttk` Widgets accepts the following options: | 
|  |  | 
|  | .. tabularcolumns:: |l|L| | 
|  |  | 
|  | +-----------+--------------------------------------------------------------+ | 
|  | | Option    | Description                                                  | | 
|  | +===========+==============================================================+ | 
|  | | class     | Specifies the window class. The class is used when querying  | | 
|  | |           | the option database for the window's other options, to       | | 
|  | |           | determine the default bindtags for the window, and to select | | 
|  | |           | the widget's default layout and style. This option is        | | 
|  | |           | read-only, and may only be specified when the window is      | | 
|  | |           | created.                                                     | | 
|  | +-----------+--------------------------------------------------------------+ | 
|  | | cursor    | Specifies the mouse cursor to be used for the widget. If set | | 
|  | |           | to the empty string (the default), the cursor is inherited   | | 
|  | |           | for the parent widget.                                       | | 
|  | +-----------+--------------------------------------------------------------+ | 
|  | | takefocus | Determines whether the window accepts the focus during       | | 
|  | |           | keyboard traversal. 0, 1 or an empty string is returned.     | | 
|  | |           | If 0 is returned, it means that the window should be skipped | | 
|  | |           | entirely during keyboard traversal. If 1, it means that the  | | 
|  | |           | window should receive the input focus as long as it is       | | 
|  | |           | viewable. And an empty string means that the traversal       | | 
|  | |           | scripts make the decision about whether or not to focus      | | 
|  | |           | on the window.                                               | | 
|  | +-----------+--------------------------------------------------------------+ | 
|  | | style     | May be used to specify a custom widget style.                | | 
|  | +-----------+--------------------------------------------------------------+ | 
|  |  | 
|  |  | 
|  | Scrollable Widget Options | 
|  | ^^^^^^^^^^^^^^^^^^^^^^^^^ | 
|  |  | 
|  | The following options are supported by widgets that are controlled by a | 
|  | scrollbar. | 
|  |  | 
|  | .. tabularcolumns:: |l|L| | 
|  |  | 
|  | +----------------+---------------------------------------------------------+ | 
|  | | Option         | Description                                             | | 
|  | +================+=========================================================+ | 
|  | | xscrollcommand | Used to communicate with horizontal scrollbars.         | | 
|  | |                |                                                         | | 
|  | |                | When the view in the widget's window change, the widget | | 
|  | |                | will generate a Tcl command based on the scrollcommand. | | 
|  | |                |                                                         | | 
|  | |                | Usually this option consists of the method              | | 
|  | |                | :meth:`Scrollbar.set` of some scrollbar. This will cause| | 
|  | |                | the scrollbar to be updated whenever the view in the    | | 
|  | |                | window changes.                                         | | 
|  | +----------------+---------------------------------------------------------+ | 
|  | | yscrollcommand | Used to communicate with vertical scrollbars.           | | 
|  | |                | For some more information, see above.                   | | 
|  | +----------------+---------------------------------------------------------+ | 
|  |  | 
|  |  | 
|  | Label Options | 
|  | ^^^^^^^^^^^^^ | 
|  |  | 
|  | The following options are supported by labels, buttons and other button-like | 
|  | widgets. | 
|  |  | 
|  | .. tabularcolumns:: |l|p{0.7\linewidth}| | 
|  |  | 
|  | +--------------+-----------------------------------------------------------+ | 
|  | | Option       | Description                                               | | 
|  | +==============+===========================================================+ | 
|  | | text         | Specifies a text string to be displayed inside the widget.| | 
|  | +--------------+-----------------------------------------------------------+ | 
|  | | textvariable | Specifies a name whose value will be used in place of the | | 
|  | |              | text option resource.                                     | | 
|  | +--------------+-----------------------------------------------------------+ | 
|  | | underline    | If set, specifies the index (0-based) of a character to   | | 
|  | |              | underline in the text string. The underline character is  | | 
|  | |              | used for mnemonic activation.                             | | 
|  | +--------------+-----------------------------------------------------------+ | 
|  | | image        | Specifies an image to display. This is a list of 1 or more| | 
|  | |              | elements. The first element is the default image name. The| | 
|  | |              | rest of the list if a sequence of statespec/value pairs as| | 
|  | |              | defined by :meth:`Style.map`, specifying different images | | 
|  | |              | to use when the widget is in a particular state or a      | | 
|  | |              | combination of states. All images in the list should have | | 
|  | |              | the same size.                                            | | 
|  | +--------------+-----------------------------------------------------------+ | 
|  | | compound     | Specifies how to display the image relative to the text,  | | 
|  | |              | in the case both text and images options are present.     | | 
|  | |              | Valid values are:                                         | | 
|  | |              |                                                           | | 
|  | |              | * text: display text only                                 | | 
|  | |              | * image: display image only                               | | 
|  | |              | * top, bottom, left, right: display image above, below,   | | 
|  | |              |   left of, or right of the text, respectively.            | | 
|  | |              | * none: the default. display the image if present,        | | 
|  | |              |   otherwise the text.                                     | | 
|  | +--------------+-----------------------------------------------------------+ | 
|  | | width        | If greater than zero, specifies how much space, in        | | 
|  | |              | character widths, to allocate for the text label, if less | | 
|  | |              | than zero, specifies a minimum width. If zero or          | | 
|  | |              | unspecified, the natural width of the text label is used. | | 
|  | +--------------+-----------------------------------------------------------+ | 
|  |  | 
|  |  | 
|  | Compatibility Options | 
|  | ^^^^^^^^^^^^^^^^^^^^^ | 
|  |  | 
|  | .. tabularcolumns:: |l|L| | 
|  |  | 
|  | +--------+----------------------------------------------------------------+ | 
|  | | Option | Description                                                    | | 
|  | +========+================================================================+ | 
|  | | state  | May be set to "normal" or "disabled" to control the "disabled" | | 
|  | |        | state bit. This is a write-only option: setting it changes the | | 
|  | |        | widget state, but the :meth:`Widget.state` method does not     | | 
|  | |        | affect this option.                                            | | 
|  | +--------+----------------------------------------------------------------+ | 
|  |  | 
|  | Widget States | 
|  | ^^^^^^^^^^^^^ | 
|  |  | 
|  | The widget state is a bitmap of independent state flags. | 
|  |  | 
|  | .. tabularcolumns:: |l|L| | 
|  |  | 
|  | +------------+-------------------------------------------------------------+ | 
|  | | Flag       | Description                                                 | | 
|  | +============+=============================================================+ | 
|  | | active     | The mouse cursor is over the widget and pressing a mouse    | | 
|  | |            | button will cause some action to occur                      | | 
|  | +------------+-------------------------------------------------------------+ | 
|  | | disabled   | Widget is disabled under program control                    | | 
|  | +------------+-------------------------------------------------------------+ | 
|  | | focus      | Widget has keyboard focus                                   | | 
|  | +------------+-------------------------------------------------------------+ | 
|  | | pressed    | Widget is being pressed                                     | | 
|  | +------------+-------------------------------------------------------------+ | 
|  | | selected   | "On", "true", or "current" for things like Checkbuttons and | | 
|  | |            | radiobuttons                                                | | 
|  | +------------+-------------------------------------------------------------+ | 
|  | | background | Windows and Mac have a notion of an "active" or foreground  | | 
|  | |            | window. The *background* state is set for widgets in a      | | 
|  | |            | background window, and cleared for those in the foreground  | | 
|  | |            | window                                                      | | 
|  | +------------+-------------------------------------------------------------+ | 
|  | | readonly   | Widget should not allow user modification                   | | 
|  | +------------+-------------------------------------------------------------+ | 
|  | | alternate  | A widget-specific alternate display format                  | | 
|  | +------------+-------------------------------------------------------------+ | 
|  | | invalid    | The widget's value is invalid                               | | 
|  | +------------+-------------------------------------------------------------+ | 
|  |  | 
|  | A state specification is a sequence of state names, optionally prefixed with | 
|  | an exclamation point indicating that the bit is off. | 
|  |  | 
|  |  | 
|  | ttk.Widget | 
|  | ^^^^^^^^^^ | 
|  |  | 
|  | Besides the methods described below, the :class:`ttk.Widget` supports the | 
|  | methods :meth:`tkinter.Widget.cget` and :meth:`tkinter.Widget.configure`. | 
|  |  | 
|  | .. class:: Widget | 
|  |  | 
|  | .. method:: identify(x, y) | 
|  |  | 
|  | Returns the name of the element at position *x* *y*, or the empty string | 
|  | if the point does not lie within any element. | 
|  |  | 
|  | *x* and *y* are pixel coordinates relative to the widget. | 
|  |  | 
|  |  | 
|  | .. method:: instate(statespec, callback=None, *args, **kw) | 
|  |  | 
|  | Test the widget's state. If a callback is not specified, returns ``True`` | 
|  | if the widget state matches *statespec* and ``False`` otherwise. If callback | 
|  | is specified then it is called with args if widget state matches | 
|  | *statespec*. | 
|  |  | 
|  |  | 
|  | .. method:: state(statespec=None) | 
|  |  | 
|  | Modify or inquire widget state. If *statespec* is specified, sets the | 
|  | widget state according to it and return a new *statespec* indicating | 
|  | which flags were changed. If *statespec* is not specified, returns | 
|  | the currently-enabled state flags. | 
|  |  | 
|  | *statespec* will usually be a list or a tuple. | 
|  |  | 
|  |  | 
|  | Combobox | 
|  | -------- | 
|  |  | 
|  | The :class:`ttk.Combobox` widget combines a text field with a pop-down list of | 
|  | values. This widget is a subclass of :class:`Entry`. | 
|  |  | 
|  | Besides the methods inherited from :class:`Widget`: :meth:`Widget.cget`, | 
|  | :meth:`Widget.configure`, :meth:`Widget.identify`, :meth:`Widget.instate` | 
|  | and :meth:`Widget.state`, and the following inherited from :class:`Entry`: | 
|  | :meth:`Entry.bbox`, :meth:`Entry.delete`, :meth:`Entry.icursor`, | 
|  | :meth:`Entry.index`, :meth:`Entry.insert`, :meth:`Entry.selection`, | 
|  | :meth:`Entry.xview`, it has some other methods, described at | 
|  | :class:`ttk.Combobox`. | 
|  |  | 
|  |  | 
|  | Options | 
|  | ^^^^^^^ | 
|  |  | 
|  | This widget accepts the following specific options: | 
|  |  | 
|  | .. tabularcolumns:: |l|L| | 
|  |  | 
|  | +-----------------+--------------------------------------------------------+ | 
|  | | Option          | Description                                            | | 
|  | +=================+========================================================+ | 
|  | | exportselection | Boolean value. If set, the widget selection is linked  | | 
|  | |                 | to the Window Manager selection (which can be returned | | 
|  | |                 | by invoking Misc.selection_get, for example).          | | 
|  | +-----------------+--------------------------------------------------------+ | 
|  | | justify         | Specifies how the text is aligned within the widget.   | | 
|  | |                 | One of "left", "center", or "right".                   | | 
|  | +-----------------+--------------------------------------------------------+ | 
|  | | height          | Specifies the height of the pop-down listbox, in rows. | | 
|  | +-----------------+--------------------------------------------------------+ | 
|  | | postcommand     | A script (possibly registered with Misc.register) that | | 
|  | |                 | is called immediately before displaying the values. It | | 
|  | |                 | may specify which values to display.                   | | 
|  | +-----------------+--------------------------------------------------------+ | 
|  | | state           | One of "normal", "readonly", or "disabled". In the     | | 
|  | |                 | "readonly" state, the value may not be edited directly,| | 
|  | |                 | and the user can only selection of the values from the | | 
|  | |                 | dropdown list. In the "normal" state, the text field is| | 
|  | |                 | directly editable. In the "disabled" state, no         | | 
|  | |                 | interaction is possible.                               | | 
|  | +-----------------+--------------------------------------------------------+ | 
|  | | textvariable    | Specifies a name whose value is linked to the widget   | | 
|  | |                 | value. Whenever the value associated with that name    | | 
|  | |                 | changes, the widget value is updated, and vice versa.  | | 
|  | |                 | See :class:`tkinter.StringVar`.                        | | 
|  | +-----------------+--------------------------------------------------------+ | 
|  | | values          | Specifies the list of values to display in the         | | 
|  | |                 | drop-down listbox.                                     | | 
|  | +-----------------+--------------------------------------------------------+ | 
|  | | width           | Specifies an integer value indicating the desired width| | 
|  | |                 | of the entry window, in average-size characters of the | | 
|  | |                 | widget's font.                                         | | 
|  | +-----------------+--------------------------------------------------------+ | 
|  |  | 
|  |  | 
|  | Virtual events | 
|  | ^^^^^^^^^^^^^^ | 
|  |  | 
|  | The combobox widgets generates a **<<ComboboxSelected>>** virtual event | 
|  | when the user selects an element from the list of values. | 
|  |  | 
|  |  | 
|  | ttk.Combobox | 
|  | ^^^^^^^^^^^^ | 
|  |  | 
|  | .. class:: Combobox | 
|  |  | 
|  | .. method:: current(newindex=None) | 
|  |  | 
|  | If *newindex* is specified, sets the combobox value to the element | 
|  | position *newindex*. Otherwise, returns the index of the current value or | 
|  | -1 if the current value is not in the values list. | 
|  |  | 
|  |  | 
|  | .. method:: get() | 
|  |  | 
|  | Returns the current value of the combobox. | 
|  |  | 
|  |  | 
|  | .. method:: set(value) | 
|  |  | 
|  | Sets the value of the combobox to *value*. | 
|  |  | 
|  |  | 
|  | Notebook | 
|  | -------- | 
|  |  | 
|  | Ttk Notebook widget manages a collection of windows and displays a single | 
|  | one at a time. Each child window is associated with a tab, which the user | 
|  | may select to change the currently-displayed window. | 
|  |  | 
|  |  | 
|  | Options | 
|  | ^^^^^^^ | 
|  |  | 
|  | This widget accepts the following specific options: | 
|  |  | 
|  | .. tabularcolumns:: |l|L| | 
|  |  | 
|  | +---------+----------------------------------------------------------------+ | 
|  | | Option  | Description                                                    | | 
|  | +=========+================================================================+ | 
|  | | height  | If present and greater than zero, specifies the desired height | | 
|  | |         | of the pane area (not including internal padding or tabs).     | | 
|  | |         | Otherwise, the maximum height of all panes is used.            | | 
|  | +---------+----------------------------------------------------------------+ | 
|  | | padding | Specifies the amount of extra space to add around the outside  | | 
|  | |         | of the notebook. The padding is a list up to four length       | | 
|  | |         | specifications left top right bottom. If fewer than four       | | 
|  | |         | elements are specified, bottom defaults to top, right defaults | | 
|  | |         | to left, and top defaults to left.                             | | 
|  | +---------+----------------------------------------------------------------+ | 
|  | | width   | If present and greater than zero, specified the desired width  | | 
|  | |         | of the pane area (not including internal padding). Otherwise,  | | 
|  | |         | the maximum width of all panes is used.                        | | 
|  | +---------+----------------------------------------------------------------+ | 
|  |  | 
|  |  | 
|  | Tab Options | 
|  | ^^^^^^^^^^^ | 
|  |  | 
|  | There are also specific options for tabs: | 
|  |  | 
|  | .. tabularcolumns:: |l|L| | 
|  |  | 
|  | +-----------+--------------------------------------------------------------+ | 
|  | | Option    | Description                                                  | | 
|  | +===========+==============================================================+ | 
|  | | state     | Either "normal", "disabled" or "hidden". If "disabled", then | | 
|  | |           | the tab is not selectable. If "hidden", then the tab is not  | | 
|  | |           | shown.                                                       | | 
|  | +-----------+--------------------------------------------------------------+ | 
|  | | sticky    | Specifies how the child window is positioned within the pane | | 
|  | |           | area. Value is a string containing zero or more of the       | | 
|  | |           | characters "n", "s", "e" or "w". Each letter refers to a     | | 
|  | |           | side (north, south, east or west) that the child window will | | 
|  | |           | stick to, as per the :meth:`grid` geometry manager.          | | 
|  | +-----------+--------------------------------------------------------------+ | 
|  | | padding   | Specifies the amount of extra space to add between the       | | 
|  | |           | notebook and this pane. Syntax is the same as for the option | | 
|  | |           | padding used by this widget.                                 | | 
|  | +-----------+--------------------------------------------------------------+ | 
|  | | text      | Specifies a text to be displayed in the tab.                 | | 
|  | +-----------+--------------------------------------------------------------+ | 
|  | | image     | Specifies an image to display in the tab. See the option     | | 
|  | |           | image described in :class:`Widget`.                          | | 
|  | +-----------+--------------------------------------------------------------+ | 
|  | | compound  | Specifies how to display the image relative to the text, in  | | 
|  | |           | the case both options text and image are present. See        | | 
|  | |           | `Label Options`_ for legal values.                           | | 
|  | +-----------+--------------------------------------------------------------+ | 
|  | | underline | Specifies the index (0-based) of a character to underline in | | 
|  | |           | the text string. The underlined character is used for        | | 
|  | |           | mnemonic activation if :meth:`Notebook.enable_traversal` is  | | 
|  | |           | called.                                                      | | 
|  | +-----------+--------------------------------------------------------------+ | 
|  |  | 
|  |  | 
|  | Tab Identifiers | 
|  | ^^^^^^^^^^^^^^^ | 
|  |  | 
|  | The tab_id present in several methods of :class:`ttk.Notebook` may take any | 
|  | of the following forms: | 
|  |  | 
|  | * An integer between zero and the number of tabs | 
|  | * The name of a child window | 
|  | * A positional specification of the form "@x,y", which identifies the tab | 
|  | * The literal string "current", which identifies the currently-selected tab | 
|  | * The literal string "end", which returns the number of tabs (only valid for | 
|  | :meth:`Notebook.index`) | 
|  |  | 
|  |  | 
|  | Virtual Events | 
|  | ^^^^^^^^^^^^^^ | 
|  |  | 
|  | This widget generates a **<<NotebookTabChanged>>** virtual event after a new | 
|  | tab is selected. | 
|  |  | 
|  |  | 
|  | ttk.Notebook | 
|  | ^^^^^^^^^^^^ | 
|  |  | 
|  | .. class:: Notebook | 
|  |  | 
|  | .. method:: add(child, **kw) | 
|  |  | 
|  | Adds a new tab to the notebook. | 
|  |  | 
|  | If window is currently managed by the notebook but hidden, it is | 
|  | restored to its previous position. | 
|  |  | 
|  | See `Tab Options`_ for the list of available options. | 
|  |  | 
|  |  | 
|  | .. method:: forget(tab_id) | 
|  |  | 
|  | Removes the tab specified by *tab_id*, unmaps and unmanages the | 
|  | associated window. | 
|  |  | 
|  |  | 
|  | .. method:: hide(tab_id) | 
|  |  | 
|  | Hides the tab specified by *tab_id*. | 
|  |  | 
|  | The tab will not be displayed, but the associated window remains | 
|  | managed by the notebook and its configuration remembered. Hidden tabs | 
|  | may be restored with the :meth:`add` command. | 
|  |  | 
|  |  | 
|  | .. method:: identify(x, y) | 
|  |  | 
|  | Returns the name of the tab element at position *x*, *y*, or the empty | 
|  | string if none. | 
|  |  | 
|  |  | 
|  | .. method:: index(tab_id) | 
|  |  | 
|  | Returns the numeric index of the tab specified by *tab_id*, or the total | 
|  | number of tabs if *tab_id* is the string "end". | 
|  |  | 
|  |  | 
|  | .. method:: insert(pos, child, **kw) | 
|  |  | 
|  | Inserts a pane at the specified position. | 
|  |  | 
|  | *pos* is either the string "end", an integer index, or the name of a | 
|  | managed child. If *child* is already managed by the notebook, moves it to | 
|  | the specified position. | 
|  |  | 
|  | See `Tab Options`_ for the list of available options. | 
|  |  | 
|  |  | 
|  | .. method:: select(tab_id=None) | 
|  |  | 
|  | Selects the specified *tab_id*. | 
|  |  | 
|  | The associated child window will be displayed, and the | 
|  | previously-selected window (if different) is unmapped. If *tab_id* is | 
|  | omitted, returns the widget name of the currently selected pane. | 
|  |  | 
|  |  | 
|  | .. method:: tab(tab_id, option=None, **kw) | 
|  |  | 
|  | Query or modify the options of the specific *tab_id*. | 
|  |  | 
|  | If *kw* is not given, returns a dictionary of the tab option values. If | 
|  | *option* is specified, returns the value of that *option*. Otherwise, | 
|  | sets the options to the corresponding values. | 
|  |  | 
|  |  | 
|  | .. method:: tabs() | 
|  |  | 
|  | Returns a list of windows managed by the notebook. | 
|  |  | 
|  |  | 
|  | .. method:: enable_traversal() | 
|  |  | 
|  | Enable keyboard traversal for a toplevel window containing this notebook. | 
|  |  | 
|  | This will extend the bindings for the toplevel window containing the | 
|  | notebook as follows: | 
|  |  | 
|  | * :kbd:`Control-Tab`: selects the tab following the currently selected one. | 
|  | * :kbd:`Shift-Control-Tab`: selects the tab preceding the currently selected one. | 
|  | * :kbd:`Alt-K`: where *K* is the mnemonic (underlined) character of any tab, will | 
|  | select that tab. | 
|  |  | 
|  | Multiple notebooks in a single toplevel may be enabled for traversal, | 
|  | including nested notebooks. However, notebook traversal only works | 
|  | properly if all panes have the notebook they are in as master. | 
|  |  | 
|  |  | 
|  | Progressbar | 
|  | ----------- | 
|  |  | 
|  | The :class:`ttk.Progressbar` widget shows the status of a long-running | 
|  | operation. It can operate in two modes:  1) the determinate mode which shows the | 
|  | amount completed relative to the total amount of work to be done and 2) the | 
|  | indeterminate mode which provides an animated display to let the user know that | 
|  | work is progressing. | 
|  |  | 
|  |  | 
|  | Options | 
|  | ^^^^^^^ | 
|  |  | 
|  | This widget accepts the following specific options: | 
|  |  | 
|  | .. tabularcolumns:: |l|L| | 
|  |  | 
|  | +----------+---------------------------------------------------------------+ | 
|  | | Option   | Description                                                   | | 
|  | +==========+===============================================================+ | 
|  | | orient   | One of "horizontal" or "vertical". Specifies the orientation  | | 
|  | |          | of the progress bar.                                          | | 
|  | +----------+---------------------------------------------------------------+ | 
|  | | length   | Specifies the length of the long axis of the progress bar     | | 
|  | |          | (width if horizontal, height if vertical).                    | | 
|  | +----------+---------------------------------------------------------------+ | 
|  | | mode     | One of "determinate" or "indeterminate".                      | | 
|  | +----------+---------------------------------------------------------------+ | 
|  | | maximum  | A number specifying the maximum value. Defaults to 100.       | | 
|  | +----------+---------------------------------------------------------------+ | 
|  | | value    | The current value of the progress bar. In "determinate" mode, | | 
|  | |          | this represents the amount of work completed. In              | | 
|  | |          | "indeterminate" mode, it is interpreted as modulo *maximum*;  | | 
|  | |          | that is, the progress bar completes one "cycle" when its value| | 
|  | |          | increases by *maximum*.                                       | | 
|  | +----------+---------------------------------------------------------------+ | 
|  | | variable | A name which is linked to the option value. If specified, the | | 
|  | |          | value of the progress bar is automatically set to the value of| | 
|  | |          | this name whenever the latter is modified.                    | | 
|  | +----------+---------------------------------------------------------------+ | 
|  | | phase    | Read-only option. The widget periodically increments the value| | 
|  | |          | of this option whenever its value is greater than 0 and, in   | | 
|  | |          | determinate mode, less than maximum. This option may be used  | | 
|  | |          | by the current theme to provide additional animation effects. | | 
|  | +----------+---------------------------------------------------------------+ | 
|  |  | 
|  |  | 
|  | ttk.Progressbar | 
|  | ^^^^^^^^^^^^^^^ | 
|  |  | 
|  | .. class:: Progressbar | 
|  |  | 
|  | .. method:: start(interval=None) | 
|  |  | 
|  | Begin autoincrement mode: schedules a recurring timer event that calls | 
|  | :meth:`Progressbar.step` every *interval* milliseconds. If omitted, | 
|  | *interval* defaults to 50 milliseconds. | 
|  |  | 
|  |  | 
|  | .. method:: step(amount=None) | 
|  |  | 
|  | Increments the progress bar's value by *amount*. | 
|  |  | 
|  | *amount* defaults to 1.0 if omitted. | 
|  |  | 
|  |  | 
|  | .. method:: stop() | 
|  |  | 
|  | Stop autoincrement mode: cancels any recurring timer event initiated by | 
|  | :meth:`Progressbar.start` for this progress bar. | 
|  |  | 
|  |  | 
|  | Separator | 
|  | --------- | 
|  |  | 
|  | The :class:`ttk.Separator` widget displays a horizontal or vertical separator | 
|  | bar. | 
|  |  | 
|  | It has no other methods besides the ones inherited from :class:`ttk.Widget`. | 
|  |  | 
|  |  | 
|  | Options | 
|  | ^^^^^^^ | 
|  |  | 
|  | This widget accepts the following specific option: | 
|  |  | 
|  | .. tabularcolumns:: |l|L| | 
|  |  | 
|  | +--------+----------------------------------------------------------------+ | 
|  | | Option | Description                                                    | | 
|  | +========+================================================================+ | 
|  | | orient | One of "horizontal" or "vertical". Specifies the orientation of| | 
|  | |        | the separator.                                                 | | 
|  | +--------+----------------------------------------------------------------+ | 
|  |  | 
|  |  | 
|  | Sizegrip | 
|  | -------- | 
|  |  | 
|  | The :class:`ttk.Sizegrip` widget (also known as a grow box) allows the user to | 
|  | resize the containing toplevel window by pressing and dragging the grip. | 
|  |  | 
|  | This widget has neither specific options nor specific methods, besides the | 
|  | ones inherited from :class:`ttk.Widget`. | 
|  |  | 
|  |  | 
|  | Platform-specific notes | 
|  | ^^^^^^^^^^^^^^^^^^^^^^^ | 
|  |  | 
|  | * On MacOS X, toplevel windows automatically include a built-in size grip | 
|  | by default. Adding a :class:`Sizegrip` is harmless, since the built-in | 
|  | grip will just mask the widget. | 
|  |  | 
|  |  | 
|  | Bugs | 
|  | ^^^^ | 
|  |  | 
|  | * If the containing toplevel's position was specified relative to the right | 
|  | or bottom of the screen (e.g. ....), the :class:`Sizegrip` widget will | 
|  | not resize the window. | 
|  | * This widget supports only "southeast" resizing. | 
|  |  | 
|  |  | 
|  | Treeview | 
|  | -------- | 
|  |  | 
|  | The :class:`ttk.Treeview` widget displays a hierarchical collection of items. | 
|  | Each item has a textual label, an optional image, and an optional list of data | 
|  | values. The data values are displayed in successive columns after the tree | 
|  | label. | 
|  |  | 
|  | The order in which data values are displayed may be controlled by setting | 
|  | the widget option ``displaycolumns``. The tree widget can also display column | 
|  | headings. Columns may be accessed by number or symbolic names listed in the | 
|  | widget option columns. See `Column Identifiers`_. | 
|  |  | 
|  | Each item is identified by a unique name. The widget will generate item IDs | 
|  | if they are not supplied by the caller. There is a distinguished root item, | 
|  | named ``{}``. The root item itself is not displayed; its children appear at the | 
|  | top level of the hierarchy. | 
|  |  | 
|  | Each item also has a list of tags, which can be used to associate event bindings | 
|  | with individual items and control the appearance of the item. | 
|  |  | 
|  | The Treeview widget supports horizontal and vertical scrolling, according to | 
|  | the options described in `Scrollable Widget Options`_ and the methods | 
|  | :meth:`Treeview.xview` and :meth:`Treeview.yview`. | 
|  |  | 
|  |  | 
|  | Options | 
|  | ^^^^^^^ | 
|  |  | 
|  | This widget accepts the following specific options: | 
|  |  | 
|  | .. tabularcolumns:: |l|p{0.7\linewidth}| | 
|  |  | 
|  | +----------------+--------------------------------------------------------+ | 
|  | | Option         | Description                                            | | 
|  | +================+========================================================+ | 
|  | | columns        | A list of column identifiers, specifying the number of | | 
|  | |                | columns and their names.                               | | 
|  | +----------------+--------------------------------------------------------+ | 
|  | | displaycolumns | A list of column identifiers (either symbolic or       | | 
|  | |                | integer indices) specifying which data columns are     | | 
|  | |                | displayed and the order in which they appear, or the   | | 
|  | |                | string "#all".                                         | | 
|  | +----------------+--------------------------------------------------------+ | 
|  | | height         | Specifies the number of rows which should be visible.  | | 
|  | |                | Note: the requested width is determined from the sum   | | 
|  | |                | of the column widths.                                  | | 
|  | +----------------+--------------------------------------------------------+ | 
|  | | padding        | Specifies the internal padding for the widget. The     | | 
|  | |                | padding is a list of up to four length specifications. | | 
|  | +----------------+--------------------------------------------------------+ | 
|  | | selectmode     | Controls how the built-in class bindings manage the    | | 
|  | |                | selection. One of "extended", "browse" or "none".      | | 
|  | |                | If set to "extended" (the default), multiple items may | | 
|  | |                | be selected. If "browse", only a single item will be   | | 
|  | |                | selected at a time. If "none", the selection will not  | | 
|  | |                | be changed.                                            | | 
|  | |                |                                                        | | 
|  | |                | Note that the application code and tag bindings can set| | 
|  | |                | the selection however they wish, regardless of the     | | 
|  | |                | value  of this option.                                 | | 
|  | +----------------+--------------------------------------------------------+ | 
|  | | show           | A list containing zero or more of the following values,| | 
|  | |                | specifying which elements of the tree to display.      | | 
|  | |                |                                                        | | 
|  | |                | * tree: display tree labels in column #0.              | | 
|  | |                | * headings: display the heading row.                   | | 
|  | |                |                                                        | | 
|  | |                | The default is "tree headings", i.e., show all         | | 
|  | |                | elements.                                              | | 
|  | |                |                                                        | | 
|  | |                | **Note**: Column #0 always refers to the tree column,  | | 
|  | |                | even if show="tree" is not specified.                  | | 
|  | +----------------+--------------------------------------------------------+ | 
|  |  | 
|  |  | 
|  | Item Options | 
|  | ^^^^^^^^^^^^ | 
|  |  | 
|  | The following item options may be specified for items in the insert and item | 
|  | widget commands. | 
|  |  | 
|  | .. tabularcolumns:: |l|L| | 
|  |  | 
|  | +--------+---------------------------------------------------------------+ | 
|  | | Option | Description                                                   | | 
|  | +========+===============================================================+ | 
|  | | text   | The textual label to display for the item.                    | | 
|  | +--------+---------------------------------------------------------------+ | 
|  | | image  | A Tk Image, displayed to the left of the label.               | | 
|  | +--------+---------------------------------------------------------------+ | 
|  | | values | The list of values associated with the item.                  | | 
|  | |        |                                                               | | 
|  | |        | Each item should have the same number of values as the widget | | 
|  | |        | option columns. If there are fewer values than columns, the   | | 
|  | |        | remaining values are assumed empty. If there are more values  | | 
|  | |        | than columns, the extra values are ignored.                   | | 
|  | +--------+---------------------------------------------------------------+ | 
|  | | open   | True/False value indicating whether the item's children should| | 
|  | |        | be displayed or hidden.                                       | | 
|  | +--------+---------------------------------------------------------------+ | 
|  | | tags   | A list of tags associated with this item.                     | | 
|  | +--------+---------------------------------------------------------------+ | 
|  |  | 
|  |  | 
|  | Tag Options | 
|  | ^^^^^^^^^^^ | 
|  |  | 
|  | The following options may be specified on tags: | 
|  |  | 
|  | .. tabularcolumns:: |l|L| | 
|  |  | 
|  | +------------+-----------------------------------------------------------+ | 
|  | | Option     | Description                                               | | 
|  | +============+===========================================================+ | 
|  | | foreground | Specifies the text foreground color.                      | | 
|  | +------------+-----------------------------------------------------------+ | 
|  | | background | Specifies the cell or item background color.              | | 
|  | +------------+-----------------------------------------------------------+ | 
|  | | font       | Specifies the font to use when drawing text.              | | 
|  | +------------+-----------------------------------------------------------+ | 
|  | | image      | Specifies the item image, in case the item's image option | | 
|  | |            | is empty.                                                 | | 
|  | +------------+-----------------------------------------------------------+ | 
|  |  | 
|  |  | 
|  | Column Identifiers | 
|  | ^^^^^^^^^^^^^^^^^^ | 
|  |  | 
|  | Column identifiers take any of the following forms: | 
|  |  | 
|  | * A symbolic name from the list of columns option. | 
|  | * An integer n, specifying the nth data column. | 
|  | * A string of the form #n, where n is an integer, specifying the nth display | 
|  | column. | 
|  |  | 
|  | Notes: | 
|  |  | 
|  | * Item's option values may be displayed in a different order than the order | 
|  | in which they are stored. | 
|  | * Column #0 always refers to the tree column, even if show="tree" is not | 
|  | specified. | 
|  |  | 
|  | A data column number is an index into an item's option values list; a display | 
|  | column number is the column number in the tree where the values are displayed. | 
|  | Tree labels are displayed in column #0. If option displaycolumns is not set, | 
|  | then data column n is displayed in column #n+1. Again, **column #0 always | 
|  | refers to the tree column**. | 
|  |  | 
|  |  | 
|  | Virtual Events | 
|  | ^^^^^^^^^^^^^^ | 
|  |  | 
|  | The Treeview widget generates the following virtual events. | 
|  |  | 
|  | .. tabularcolumns:: |l|L| | 
|  |  | 
|  | +--------------------+--------------------------------------------------+ | 
|  | | Event              | Description                                      | | 
|  | +====================+==================================================+ | 
|  | | <<TreeviewSelect>> | Generated whenever the selection changes.        | | 
|  | +--------------------+--------------------------------------------------+ | 
|  | | <<TreeviewOpen>>   | Generated just before settings the focus item to | | 
|  | |                    | open=True.                                       | | 
|  | +--------------------+--------------------------------------------------+ | 
|  | | <<TreeviewClose>>  | Generated just after setting the focus item to   | | 
|  | |                    | open=False.                                      | | 
|  | +--------------------+--------------------------------------------------+ | 
|  |  | 
|  | The :meth:`Treeview.focus` and :meth:`Treeview.selection` methods can be used | 
|  | to determine the affected item or items. | 
|  |  | 
|  |  | 
|  | ttk.Treeview | 
|  | ^^^^^^^^^^^^ | 
|  |  | 
|  | .. class:: Treeview | 
|  |  | 
|  | .. method:: bbox(item, column=None) | 
|  |  | 
|  | Returns the bounding box (relative to the treeview widget's window) of | 
|  | the specified *item* in the form (x, y, width, height). | 
|  |  | 
|  | If *column* is specified, returns the bounding box of that cell. If the | 
|  | *item* is not visible (i.e., if it is a descendant of a closed item or is | 
|  | scrolled offscreen), returns an empty string. | 
|  |  | 
|  |  | 
|  | .. method:: get_children(item=None) | 
|  |  | 
|  | Returns the list of children belonging to *item*. | 
|  |  | 
|  | If *item* is not specified, returns root children. | 
|  |  | 
|  |  | 
|  | .. method:: set_children(item, *newchildren) | 
|  |  | 
|  | Replaces *item*'s child with *newchildren*. | 
|  |  | 
|  | Children present in *item* that are not present in *newchildren* are | 
|  | detached from the tree. No items in *newchildren* may be an ancestor of | 
|  | *item*. Note that not specifying *newchildren* results in detaching | 
|  | *item*'s children. | 
|  |  | 
|  |  | 
|  | .. method:: column(column, option=None, **kw) | 
|  |  | 
|  | Query or modify the options for the specified *column*. | 
|  |  | 
|  | If *kw* is not given, returns a dict of the column option values. If | 
|  | *option* is specified then the value for that *option* is returned. | 
|  | Otherwise, sets the options to the corresponding values. | 
|  |  | 
|  | The valid options/values are: | 
|  |  | 
|  | * id | 
|  | Returns the column name. This is a read-only option. | 
|  | * anchor: One of the standard Tk anchor values. | 
|  | Specifies how the text in this column should be aligned with respect | 
|  | to the cell. | 
|  | * minwidth: width | 
|  | The minimum width of the column in pixels. The treeview widget will | 
|  | not make the column any smaller than specified by this option when | 
|  | the widget is resized or the user drags a column. | 
|  | * stretch: True/False | 
|  | Specifies whether the column's width should be adjusted when | 
|  | the widget is resized. | 
|  | * width: width | 
|  | The width of the column in pixels. | 
|  |  | 
|  | To configure the tree column, call this with column = "#0" | 
|  |  | 
|  | .. method:: delete(*items) | 
|  |  | 
|  | Delete all specified *items* and all their descendants. | 
|  |  | 
|  | The root item may not be deleted. | 
|  |  | 
|  |  | 
|  | .. method:: detach(*items) | 
|  |  | 
|  | Unlinks all of the specified *items* from the tree. | 
|  |  | 
|  | 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. | 
|  |  | 
|  | The root item may not be detached. | 
|  |  | 
|  |  | 
|  | .. method:: exists(item) | 
|  |  | 
|  | Returns ``True`` if the specified *item* is present in the tree. | 
|  |  | 
|  |  | 
|  | .. method:: focus(item=None) | 
|  |  | 
|  | If *item* is specified, sets the focus item to *item*. Otherwise, returns | 
|  | the current focus item, or '' if there is none. | 
|  |  | 
|  |  | 
|  | .. method:: heading(column, option=None, **kw) | 
|  |  | 
|  | Query or modify the heading options for the specified *column*. | 
|  |  | 
|  | If *kw* is not given, returns a dict of the heading option values. If | 
|  | *option* is specified then the value for that *option* is returned. | 
|  | Otherwise, sets the options to the corresponding values. | 
|  |  | 
|  | The valid options/values are: | 
|  |  | 
|  | * text: text | 
|  | The text to display in the column heading. | 
|  | * image: imageName | 
|  | Specifies an image to display to the right of the column heading. | 
|  | * anchor: anchor | 
|  | Specifies how the heading text should be aligned. One of the standard | 
|  | Tk anchor values. | 
|  | * command: callback | 
|  | A callback to be invoked when the heading label is pressed. | 
|  |  | 
|  | To configure the tree column heading, call this with column = "#0". | 
|  |  | 
|  |  | 
|  | .. method:: identify(component, x, y) | 
|  |  | 
|  | Returns a description of the specified *component* under the point given | 
|  | by *x* and *y*, or the empty string if no such *component* is present at | 
|  | that position. | 
|  |  | 
|  |  | 
|  | .. method:: identify_row(y) | 
|  |  | 
|  | Returns the item ID of the item at position *y*. | 
|  |  | 
|  |  | 
|  | .. method:: identify_column(x) | 
|  |  | 
|  | Returns the data column identifier of the cell at position *x*. | 
|  |  | 
|  | The tree column has ID #0. | 
|  |  | 
|  |  | 
|  | .. method:: identify_region(x, y) | 
|  |  | 
|  | Returns one of: | 
|  |  | 
|  | +-----------+--------------------------------------+ | 
|  | | region    | meaning                              | | 
|  | +===========+======================================+ | 
|  | | heading   | Tree heading area.                   | | 
|  | +-----------+--------------------------------------+ | 
|  | | separator | Space between two columns headings.  | | 
|  | +-----------+--------------------------------------+ | 
|  | | tree      | The tree area.                       | | 
|  | +-----------+--------------------------------------+ | 
|  | | cell      | A data cell.                         | | 
|  | +-----------+--------------------------------------+ | 
|  |  | 
|  | Availability: Tk 8.6. | 
|  |  | 
|  |  | 
|  | .. method:: identify_element(x, y) | 
|  |  | 
|  | Returns the element at position *x*, *y*. | 
|  |  | 
|  | Availability: Tk 8.6. | 
|  |  | 
|  |  | 
|  | .. method:: index(item) | 
|  |  | 
|  | Returns the integer index of *item* within its parent's list of children. | 
|  |  | 
|  |  | 
|  | .. method:: insert(parent, index, iid=None, **kw) | 
|  |  | 
|  | Creates a new item and returns the item identifier of the newly created | 
|  | item. | 
|  |  | 
|  | *parent* is the item ID of the parent item, or the empty string to create | 
|  | a new top-level item. *index* is an integer, or the value "end", | 
|  | specifying where in the list of parent's children to insert the new item. | 
|  | If *index* is less than or equal to zero, the new node is inserted at | 
|  | the beginning; if *index* is greater than or equal to the current number | 
|  | of children, it is inserted at the end. If *iid* is specified, it is used | 
|  | as the item identifier; *iid* must not already exist in the tree. | 
|  | Otherwise, a new unique identifier is generated. | 
|  |  | 
|  | See `Item Options`_ for the list of available points. | 
|  |  | 
|  |  | 
|  | .. method:: item(item, option=None, **kw) | 
|  |  | 
|  | Query or modify the options for the specified *item*. | 
|  |  | 
|  | If no options are given, a dict with options/values for the item is | 
|  | returned. | 
|  | If *option* is specified then the value for that option is returned. | 
|  | Otherwise, sets the options to the corresponding values as given by *kw*. | 
|  |  | 
|  |  | 
|  | .. method:: move(item, parent, index) | 
|  |  | 
|  | Moves *item* to position *index* in *parent*'s list of children. | 
|  |  | 
|  | It is illegal to move an item under one of its descendants. If *index* is | 
|  | less than or equal to zero, *item* is moved to the beginning; if greater | 
|  | than or equal to the number of children, it is moved to the end. If *item* | 
|  | was detached it is reattached. | 
|  |  | 
|  |  | 
|  | .. method:: next(item) | 
|  |  | 
|  | Returns the identifier of *item*'s next sibling, or '' if *item* is the | 
|  | last child of its parent. | 
|  |  | 
|  |  | 
|  | .. method:: parent(item) | 
|  |  | 
|  | Returns the ID of the parent of *item*, or '' if *item* is at the top | 
|  | level of the hierarchy. | 
|  |  | 
|  |  | 
|  | .. method:: prev(item) | 
|  |  | 
|  | Returns the identifier of *item*'s previous sibling, or '' if *item* is | 
|  | the first child of its parent. | 
|  |  | 
|  |  | 
|  | .. method:: reattach(item, parent, index) | 
|  |  | 
|  | An alias for :meth:`Treeview.move`. | 
|  |  | 
|  |  | 
|  | .. method:: see(item) | 
|  |  | 
|  | Ensure that *item* is visible. | 
|  |  | 
|  | Sets all of *item*'s ancestors open option to ``True``, and scrolls the | 
|  | widget if necessary so that *item* is within the visible portion of | 
|  | the tree. | 
|  |  | 
|  |  | 
|  | .. method:: selection(selop=None, items=None) | 
|  |  | 
|  | If *selop* is not specified, returns selected items. Otherwise, it will | 
|  | act according to the following selection methods. | 
|  |  | 
|  |  | 
|  | .. method:: selection_set(items) | 
|  |  | 
|  | *items* becomes the new selection. | 
|  |  | 
|  |  | 
|  | .. method:: selection_add(items) | 
|  |  | 
|  | Add *items* to the selection. | 
|  |  | 
|  |  | 
|  | .. method:: selection_remove(items) | 
|  |  | 
|  | Remove *items* from the selection. | 
|  |  | 
|  |  | 
|  | .. method:: selection_toggle(items) | 
|  |  | 
|  | Toggle the selection state of each item in *items*. | 
|  |  | 
|  |  | 
|  | .. method:: set(item, column=None, value=None) | 
|  |  | 
|  | With one argument, returns a dictionary of column/value pairs for the | 
|  | specified *item*. With two arguments, returns the current value of the | 
|  | specified *column*. With three arguments, sets the value of given | 
|  | *column* in given *item* to the specified *value*. | 
|  |  | 
|  |  | 
|  | .. method:: tag_bind(tagname, sequence=None, callback=None) | 
|  |  | 
|  | Bind a callback for the given event *sequence* to the tag *tagname*. | 
|  | When an event is delivered to an item, the callbacks for each of the | 
|  | item's tags option are called. | 
|  |  | 
|  |  | 
|  | .. method:: tag_configure(tagname, option=None, **kw) | 
|  |  | 
|  | Query or modify the options for the specified *tagname*. | 
|  |  | 
|  | If *kw* is not given, returns a dict of the option settings for | 
|  | *tagname*. If *option* is specified, returns the value for that *option* | 
|  | for the specified *tagname*. Otherwise, sets the options to the | 
|  | corresponding values for the given *tagname*. | 
|  |  | 
|  |  | 
|  | .. method:: tag_has(tagname, item=None) | 
|  |  | 
|  | If *item* is specified, returns 1 or 0 depending on whether the specified | 
|  | *item* has the given *tagname*. Otherwise, returns a list of all items | 
|  | that have the specified tag. | 
|  |  | 
|  | Availability: Tk 8.6 | 
|  |  | 
|  |  | 
|  | .. method:: xview(*args) | 
|  |  | 
|  | Query or modify horizontal position of the treeview. | 
|  |  | 
|  |  | 
|  | .. method:: yview(*args) | 
|  |  | 
|  | Query or modify vertical position of the treeview. | 
|  |  | 
|  |  | 
|  | .. _TtkStyling: | 
|  |  | 
|  | Ttk Styling | 
|  | ----------- | 
|  |  | 
|  | Each widget in :mod:`ttk` is assigned a style, which specifies the set of | 
|  | elements making up the widget and how they are arranged, along with dynamic | 
|  | and default settings for element options. By default the style name is the | 
|  | same as the widget's class name, but it may be overridden by the widget's style | 
|  | option. If you don't know the class name of a widget, use the method | 
|  | :meth:`Misc.winfo_class` (somewidget.winfo_class()). | 
|  |  | 
|  | .. seealso:: | 
|  |  | 
|  | `Tcl'2004 conference presentation <http://tktable.sourceforge.net/tile/tile-tcl2004.pdf>`_ | 
|  | This document explains how the theme engine works | 
|  |  | 
|  |  | 
|  | .. class:: Style | 
|  |  | 
|  | This class is used to manipulate the style database. | 
|  |  | 
|  |  | 
|  | .. method:: configure(style, query_opt=None, **kw) | 
|  |  | 
|  | Query or set the default value of the specified option(s) in *style*. | 
|  |  | 
|  | Each key in *kw* is an option and each value is a string identifying | 
|  | the value for that option. | 
|  |  | 
|  | For example, to change every default button to be a flat button with | 
|  | some padding and a different background color:: | 
|  |  | 
|  | 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() | 
|  |  | 
|  |  | 
|  | .. method:: map(style, query_opt=None, **kw) | 
|  |  | 
|  | Query or sets dynamic values of the specified option(s) in *style*. | 
|  |  | 
|  | Each key in *kw* is an option and each value should be a list or a | 
|  | tuple (usually) containing statespecs grouped in tuples, lists, or | 
|  | some other preference. A statespec is a compound of one | 
|  | or more states and then a value. | 
|  |  | 
|  | An example may make it more understandable:: | 
|  |  | 
|  | 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() | 
|  |  | 
|  |  | 
|  | Note that the order of the (states, value) sequences for an option does | 
|  | matter, if the order is changed to ``[('active', 'blue'), ('pressed', | 
|  | 'red')]`` in the foreground option, for example, the result would be a | 
|  | blue foreground when the widget were in active or pressed states. | 
|  |  | 
|  |  | 
|  | .. method:: lookup(style, option, state=None, default=None) | 
|  |  | 
|  | Returns the value specified for *option* in *style*. | 
|  |  | 
|  | If *state* is specified, it is expected to be a sequence of one or more | 
|  | states. If the *default* argument is set, it is used as a fallback value | 
|  | in case no specification for option is found. | 
|  |  | 
|  | To check what font a Button uses by default:: | 
|  |  | 
|  | from tkinter import ttk | 
|  |  | 
|  | print(ttk.Style().lookup("TButton", "font")) | 
|  |  | 
|  |  | 
|  | .. method:: layout(style, layoutspec=None) | 
|  |  | 
|  | Define the widget layout for given *style*. If *layoutspec* is omitted, | 
|  | return the layout specification for given style. | 
|  |  | 
|  | *layoutspec*, if specified, is expected to be a list or some other | 
|  | sequence type (excluding strings), where each item should be a tuple and | 
|  | the first item is the layout name and the second item should have the | 
|  | format described in `Layouts`_. | 
|  |  | 
|  | To understand the format, see the following example (it is not | 
|  | intended to do anything useful):: | 
|  |  | 
|  | 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() | 
|  |  | 
|  |  | 
|  | .. method:: 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.6a for Windows XP and Vista and is not described here. | 
|  |  | 
|  | If "image" is used, *args* should contain the default image name followed | 
|  | by statespec/value pairs (this is the imagespec), and *kw* may have the | 
|  | following options: | 
|  |  | 
|  | * border=padding | 
|  | padding is a list of up to four integers, specifying the left, top, | 
|  | right, and bottom borders, respectively. | 
|  |  | 
|  | * height=height | 
|  | Specifies a minimum height for the element. If less than zero, the | 
|  | base image's height is used as a default. | 
|  |  | 
|  | * padding=padding | 
|  | Specifies the element's interior padding. Defaults to border's value | 
|  | if not specified. | 
|  |  | 
|  | * sticky=spec | 
|  | Specifies how the image is placed within the final parcel. spec | 
|  | contains zero or more characters "n", "s", "w", or "e". | 
|  |  | 
|  | * width=width | 
|  | Specifies a minimum width for the element. If less than zero, the | 
|  | base image's width is used as a default. | 
|  |  | 
|  | If "from" is used as the value of *etype*, | 
|  | :meth:`element_create` will clone an existing | 
|  | element. *args* is expected to contain a themename, from which | 
|  | the element will be cloned, and optionally an element to clone from. | 
|  | If this element to clone from is not specified, an empty element will | 
|  | be used. *kw* is discarded. | 
|  |  | 
|  |  | 
|  | .. method:: element_names() | 
|  |  | 
|  | Returns the list of elements defined in the current theme. | 
|  |  | 
|  |  | 
|  | .. method:: element_options(elementname) | 
|  |  | 
|  | Returns the list of *elementname*'s options. | 
|  |  | 
|  |  | 
|  | .. method:: theme_create(themename, parent=None, settings=None) | 
|  |  | 
|  | Create a new theme. | 
|  |  | 
|  | It is an error if *themename* already exists. If *parent* is specified, | 
|  | the new theme will inherit styles, elements and layouts from the parent | 
|  | theme. If *settings* are present they are expected to have the same | 
|  | syntax used for :meth:`theme_settings`. | 
|  |  | 
|  |  | 
|  | .. method:: theme_settings(themename, settings) | 
|  |  | 
|  | Temporarily sets the current theme to *themename*, apply specified | 
|  | *settings* and then restore the previous theme. | 
|  |  | 
|  | Each key in *settings* is a style and each value may contain the keys | 
|  | 'configure', 'map', 'layout' and 'element create' and they are expected | 
|  | to have the same format as specified by the methods | 
|  | :meth:`Style.configure`, :meth:`Style.map`, :meth:`Style.layout` and | 
|  | :meth:`Style.element_create` respectively. | 
|  |  | 
|  | As an example, let's change the Combobox for the default theme a bit:: | 
|  |  | 
|  | 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() | 
|  |  | 
|  |  | 
|  | .. method:: theme_names() | 
|  |  | 
|  | Returns a list of all known themes. | 
|  |  | 
|  |  | 
|  | .. method:: theme_use(themename=None) | 
|  |  | 
|  | If *themename* is not given, returns the theme in use.  Otherwise, sets | 
|  | the current theme to *themename*, refreshes all widgets and emits a | 
|  | <<ThemeChanged>> event. | 
|  |  | 
|  |  | 
|  | Layouts | 
|  | ^^^^^^^ | 
|  |  | 
|  | 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. Valid | 
|  | options/values are: | 
|  |  | 
|  | * side: whichside | 
|  | Specifies which side of the cavity to place the element; one of | 
|  | top, right, bottom or left. If omitted, the element occupies the | 
|  | entire cavity. | 
|  |  | 
|  | * sticky: nswe | 
|  | Specifies where the element is placed inside its allocated parcel. | 
|  |  | 
|  | * unit: 0 or 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. | 
|  |  | 
|  | * children: [sublayout... ] | 
|  | Specifies a list of elements to place inside the element. Each | 
|  | element is a tuple (or other sequence type) where the first item is | 
|  | the layout name, and the other is a `Layout`_. | 
|  |  | 
|  | .. _Layout: `Layouts`_ |