• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1:mod:`tkinter.ttk` --- Tk themed widgets
2========================================
3
4.. module:: tkinter.ttk
5   :synopsis: Tk themed widget set
6
7.. sectionauthor:: Guilherme Polo <ggpolo@gmail.com>
8
9**Source code:** :source:`Lib/tkinter/ttk.py`
10
11.. index:: single: ttk
12
13--------------
14
15The :mod:`tkinter.ttk` module provides access to the Tk themed widget set,
16introduced in Tk 8.5. If Python has not been compiled against Tk 8.5, this
17module can still be accessed if *Tile* has been installed.  The former
18method using Tk 8.5 provides additional benefits including anti-aliased font
19rendering under X11 and window transparency (requiring a composition
20window manager on X11).
21
22The basic idea for :mod:`tkinter.ttk` is to separate, to the extent possible,
23the code implementing a widget's behavior from the code implementing its
24appearance.
25
26
27.. seealso::
28
29   `Tk Widget Styling Support <https://www.tcl.tk/cgi-bin/tct/tip/48>`_
30      A document introducing theming support for Tk
31
32
33Using Ttk
34---------
35
36To start using Ttk, import its module::
37
38   from tkinter import ttk
39
40To override the basic Tk widgets, the import should follow the Tk import::
41
42   from tkinter import *
43   from tkinter.ttk import *
44
45That code causes several :mod:`tkinter.ttk` widgets (:class:`Button`,
46:class:`Checkbutton`, :class:`Entry`, :class:`Frame`, :class:`Label`,
47:class:`LabelFrame`, :class:`Menubutton`, :class:`PanedWindow`,
48:class:`Radiobutton`, :class:`Scale` and :class:`Scrollbar`) to
49automatically replace the Tk widgets.
50
51This has the direct benefit of using the new widgets which gives a better
52look and feel across platforms; however, the replacement widgets are not
53completely compatible. The main difference is that widget options such as
54"fg", "bg" and others related to widget styling are no
55longer present in Ttk widgets.  Instead, use  the :class:`ttk.Style` class
56for improved styling effects.
57
58
59.. seealso::
60
61   `Converting existing applications to use Tile widgets <http://tktable.sourceforge.net/tile/doc/converting.txt>`_
62     A monograph (using Tcl terminology) about differences typically
63     encountered when moving applications to use the new widgets.
64
65
66Ttk Widgets
67-----------
68
69Ttk comes with 17 widgets, eleven of which already existed in tkinter:
70:class:`Button`, :class:`Checkbutton`, :class:`Entry`, :class:`Frame`,
71:class:`Label`, :class:`LabelFrame`, :class:`Menubutton`, :class:`PanedWindow`,
72:class:`Radiobutton`, :class:`Scale` and :class:`Scrollbar`. The other six are
73new: :class:`Combobox`, :class:`Notebook`, :class:`Progressbar`,
74:class:`Separator`, :class:`Sizegrip` and :class:`Treeview`. And all them are
75subclasses of :class:`Widget`.
76
77Using the Ttk widgets gives the application an improved look and feel.
78As discussed above, there are differences in how the styling is coded.
79
80Tk code::
81
82   l1 = tkinter.Label(text="Test", fg="black", bg="white")
83   l2 = tkinter.Label(text="Test", fg="black", bg="white")
84
85
86Ttk code::
87
88   style = ttk.Style()
89   style.configure("BW.TLabel", foreground="black", background="white")
90
91   l1 = ttk.Label(text="Test", style="BW.TLabel")
92   l2 = ttk.Label(text="Test", style="BW.TLabel")
93
94For more information about TtkStyling_, see the :class:`Style` class
95documentation.
96
97Widget
98------
99
100:class:`ttk.Widget` defines standard options and methods supported by Tk
101themed widgets and is not supposed to be directly instantiated.
102
103
104Standard Options
105^^^^^^^^^^^^^^^^
106
107All the :mod:`ttk` Widgets accepts the following options:
108
109   .. tabularcolumns:: |l|L|
110
111   +-----------+--------------------------------------------------------------+
112   | Option    | Description                                                  |
113   +===========+==============================================================+
114   | class     | Specifies the window class. The class is used when querying  |
115   |           | the option database for the window's other options, to       |
116   |           | determine the default bindtags for the window, and to select |
117   |           | the widget's default layout and style. This option is        |
118   |           | read-only, and may only be specified when the window is      |
119   |           | created.                                                     |
120   +-----------+--------------------------------------------------------------+
121   | cursor    | Specifies the mouse cursor to be used for the widget. If set |
122   |           | to the empty string (the default), the cursor is inherited   |
123   |           | for the parent widget.                                       |
124   +-----------+--------------------------------------------------------------+
125   | takefocus | Determines whether the window accepts the focus during       |
126   |           | keyboard traversal. 0, 1 or an empty string is returned.     |
127   |           | If 0 is returned, it means that the window should be skipped |
128   |           | entirely during keyboard traversal. If 1, it means that the  |
129   |           | window should receive the input focus as long as it is       |
130   |           | viewable. And an empty string means that the traversal       |
131   |           | scripts make the decision about whether or not to focus      |
132   |           | on the window.                                               |
133   +-----------+--------------------------------------------------------------+
134   | style     | May be used to specify a custom widget style.                |
135   +-----------+--------------------------------------------------------------+
136
137
138Scrollable Widget Options
139^^^^^^^^^^^^^^^^^^^^^^^^^
140
141The following options are supported by widgets that are controlled by a
142scrollbar.
143
144   .. tabularcolumns:: |l|L|
145
146   +----------------+---------------------------------------------------------+
147   | Option         | Description                                             |
148   +================+=========================================================+
149   | xscrollcommand | Used to communicate with horizontal scrollbars.         |
150   |                |                                                         |
151   |                | When the view in the widget's window change, the widget |
152   |                | will generate a Tcl command based on the scrollcommand. |
153   |                |                                                         |
154   |                | Usually this option consists of the method              |
155   |                | :meth:`Scrollbar.set` of some scrollbar. This will cause|
156   |                | the scrollbar to be updated whenever the view in the    |
157   |                | window changes.                                         |
158   +----------------+---------------------------------------------------------+
159   | yscrollcommand | Used to communicate with vertical scrollbars.           |
160   |                | For some more information, see above.                   |
161   +----------------+---------------------------------------------------------+
162
163
164Label Options
165^^^^^^^^^^^^^
166
167The following options are supported by labels, buttons and other button-like
168widgets.
169
170   .. tabularcolumns:: |l|p{0.7\linewidth}|
171
172   +--------------+-----------------------------------------------------------+
173   | Option       | Description                                               |
174   +==============+===========================================================+
175   | text         | Specifies a text string to be displayed inside the widget.|
176   +--------------+-----------------------------------------------------------+
177   | textvariable | Specifies a name whose value will be used in place of the |
178   |              | text option resource.                                     |
179   +--------------+-----------------------------------------------------------+
180   | underline    | If set, specifies the index (0-based) of a character to   |
181   |              | underline in the text string. The underline character is  |
182   |              | used for mnemonic activation.                             |
183   +--------------+-----------------------------------------------------------+
184   | image        | Specifies an image to display. This is a list of 1 or more|
185   |              | elements. The first element is the default image name. The|
186   |              | rest of the list if a sequence of statespec/value pairs as|
187   |              | defined by :meth:`Style.map`, specifying different images |
188   |              | to use when the widget is in a particular state or a      |
189   |              | combination of states. All images in the list should have |
190   |              | the same size.                                            |
191   +--------------+-----------------------------------------------------------+
192   | compound     | Specifies how to display the image relative to the text,  |
193   |              | in the case both text and images options are present.     |
194   |              | Valid values are:                                         |
195   |              |                                                           |
196   |              | * text: display text only                                 |
197   |              | * image: display image only                               |
198   |              | * top, bottom, left, right: display image above, below,   |
199   |              |   left of, or right of the text, respectively.            |
200   |              | * none: the default. display the image if present,        |
201   |              |   otherwise the text.                                     |
202   +--------------+-----------------------------------------------------------+
203   | width        | If greater than zero, specifies how much space, in        |
204   |              | character widths, to allocate for the text label, if less |
205   |              | than zero, specifies a minimum width. If zero or          |
206   |              | unspecified, the natural width of the text label is used. |
207   +--------------+-----------------------------------------------------------+
208
209
210Compatibility Options
211^^^^^^^^^^^^^^^^^^^^^
212
213   .. tabularcolumns:: |l|L|
214
215   +--------+----------------------------------------------------------------+
216   | Option | Description                                                    |
217   +========+================================================================+
218   | state  | May be set to "normal" or "disabled" to control the "disabled" |
219   |        | state bit. This is a write-only option: setting it changes the |
220   |        | widget state, but the :meth:`Widget.state` method does not     |
221   |        | affect this option.                                            |
222   +--------+----------------------------------------------------------------+
223
224Widget States
225^^^^^^^^^^^^^
226
227The widget state is a bitmap of independent state flags.
228
229   .. tabularcolumns:: |l|L|
230
231   +------------+-------------------------------------------------------------+
232   | Flag       | Description                                                 |
233   +============+=============================================================+
234   | active     | The mouse cursor is over the widget and pressing a mouse    |
235   |            | button will cause some action to occur                      |
236   +------------+-------------------------------------------------------------+
237   | disabled   | Widget is disabled under program control                    |
238   +------------+-------------------------------------------------------------+
239   | focus      | Widget has keyboard focus                                   |
240   +------------+-------------------------------------------------------------+
241   | pressed    | Widget is being pressed                                     |
242   +------------+-------------------------------------------------------------+
243   | selected   | "On", "true", or "current" for things like Checkbuttons and |
244   |            | radiobuttons                                                |
245   +------------+-------------------------------------------------------------+
246   | background | Windows and Mac have a notion of an "active" or foreground  |
247   |            | window. The *background* state is set for widgets in a      |
248   |            | background window, and cleared for those in the foreground  |
249   |            | window                                                      |
250   +------------+-------------------------------------------------------------+
251   | readonly   | Widget should not allow user modification                   |
252   +------------+-------------------------------------------------------------+
253   | alternate  | A widget-specific alternate display format                  |
254   +------------+-------------------------------------------------------------+
255   | invalid    | The widget's value is invalid                               |
256   +------------+-------------------------------------------------------------+
257
258A state specification is a sequence of state names, optionally prefixed with
259an exclamation point indicating that the bit is off.
260
261
262ttk.Widget
263^^^^^^^^^^
264
265Besides the methods described below, the :class:`ttk.Widget` supports the
266methods :meth:`tkinter.Widget.cget` and :meth:`tkinter.Widget.configure`.
267
268.. class:: Widget
269
270   .. method:: identify(x, y)
271
272      Returns the name of the element at position *x* *y*, or the empty string
273      if the point does not lie within any element.
274
275      *x* and *y* are pixel coordinates relative to the widget.
276
277
278   .. method:: instate(statespec, callback=None, *args, **kw)
279
280      Test the widget's state. If a callback is not specified, returns ``True``
281      if the widget state matches *statespec* and ``False`` otherwise. If callback
282      is specified then it is called with args if widget state matches
283      *statespec*.
284
285
286   .. method:: state(statespec=None)
287
288      Modify or inquire widget state. If *statespec* is specified, sets the
289      widget state according to it and return a new *statespec* indicating
290      which flags were changed. If *statespec* is not specified, returns
291      the currently-enabled state flags.
292
293   *statespec* will usually be a list or a tuple.
294
295
296Combobox
297--------
298
299The :class:`ttk.Combobox` widget combines a text field with a pop-down list of
300values. This widget is a subclass of :class:`Entry`.
301
302Besides the methods inherited from :class:`Widget`: :meth:`Widget.cget`,
303:meth:`Widget.configure`, :meth:`Widget.identify`, :meth:`Widget.instate`
304and :meth:`Widget.state`, and the following inherited from :class:`Entry`:
305:meth:`Entry.bbox`, :meth:`Entry.delete`, :meth:`Entry.icursor`,
306:meth:`Entry.index`, :meth:`Entry.insert`, :meth:`Entry.selection`,
307:meth:`Entry.xview`, it has some other methods, described at
308:class:`ttk.Combobox`.
309
310
311Options
312^^^^^^^
313
314This widget accepts the following specific options:
315
316   .. tabularcolumns:: |l|L|
317
318   +-----------------+--------------------------------------------------------+
319   | Option          | Description                                            |
320   +=================+========================================================+
321   | exportselection | Boolean value. If set, the widget selection is linked  |
322   |                 | to the Window Manager selection (which can be returned |
323   |                 | by invoking Misc.selection_get, for example).          |
324   +-----------------+--------------------------------------------------------+
325   | justify         | Specifies how the text is aligned within the widget.   |
326   |                 | One of "left", "center", or "right".                   |
327   +-----------------+--------------------------------------------------------+
328   | height          | Specifies the height of the pop-down listbox, in rows. |
329   +-----------------+--------------------------------------------------------+
330   | postcommand     | A script (possibly registered with Misc.register) that |
331   |                 | is called immediately before displaying the values. It |
332   |                 | may specify which values to display.                   |
333   +-----------------+--------------------------------------------------------+
334   | state           | One of "normal", "readonly", or "disabled". In the     |
335   |                 | "readonly" state, the value may not be edited directly,|
336   |                 | and the user can only selection of the values from the |
337   |                 | dropdown list. In the "normal" state, the text field is|
338   |                 | directly editable. In the "disabled" state, no         |
339   |                 | interaction is possible.                               |
340   +-----------------+--------------------------------------------------------+
341   | textvariable    | Specifies a name whose value is linked to the widget   |
342   |                 | value. Whenever the value associated with that name    |
343   |                 | changes, the widget value is updated, and vice versa.  |
344   |                 | See :class:`tkinter.StringVar`.                        |
345   +-----------------+--------------------------------------------------------+
346   | values          | Specifies the list of values to display in the         |
347   |                 | drop-down listbox.                                     |
348   +-----------------+--------------------------------------------------------+
349   | width           | Specifies an integer value indicating the desired width|
350   |                 | of the entry window, in average-size characters of the |
351   |                 | widget's font.                                         |
352   +-----------------+--------------------------------------------------------+
353
354
355Virtual events
356^^^^^^^^^^^^^^
357
358The combobox widgets generates a **<<ComboboxSelected>>** virtual event
359when the user selects an element from the list of values.
360
361
362ttk.Combobox
363^^^^^^^^^^^^
364
365.. class:: Combobox
366
367   .. method:: current(newindex=None)
368
369      If *newindex* is specified, sets the combobox value to the element
370      position *newindex*. Otherwise, returns the index of the current value or
371      -1 if the current value is not in the values list.
372
373
374   .. method:: get()
375
376      Returns the current value of the combobox.
377
378
379   .. method:: set(value)
380
381      Sets the value of the combobox to *value*.
382
383
384Notebook
385--------
386
387Ttk Notebook widget manages a collection of windows and displays a single
388one at a time. Each child window is associated with a tab, which the user
389may select to change the currently-displayed window.
390
391
392Options
393^^^^^^^
394
395This widget accepts the following specific options:
396
397   .. tabularcolumns:: |l|L|
398
399   +---------+----------------------------------------------------------------+
400   | Option  | Description                                                    |
401   +=========+================================================================+
402   | height  | If present and greater than zero, specifies the desired height |
403   |         | of the pane area (not including internal padding or tabs).     |
404   |         | Otherwise, the maximum height of all panes is used.            |
405   +---------+----------------------------------------------------------------+
406   | padding | Specifies the amount of extra space to add around the outside  |
407   |         | of the notebook. The padding is a list up to four length       |
408   |         | specifications left top right bottom. If fewer than four       |
409   |         | elements are specified, bottom defaults to top, right defaults |
410   |         | to left, and top defaults to left.                             |
411   +---------+----------------------------------------------------------------+
412   | width   | If present and greater than zero, specified the desired width  |
413   |         | of the pane area (not including internal padding). Otherwise,  |
414   |         | the maximum width of all panes is used.                        |
415   +---------+----------------------------------------------------------------+
416
417
418Tab Options
419^^^^^^^^^^^
420
421There are also specific options for tabs:
422
423   .. tabularcolumns:: |l|L|
424
425   +-----------+--------------------------------------------------------------+
426   | Option    | Description                                                  |
427   +===========+==============================================================+
428   | state     | Either "normal", "disabled" or "hidden". If "disabled", then |
429   |           | the tab is not selectable. If "hidden", then the tab is not  |
430   |           | shown.                                                       |
431   +-----------+--------------------------------------------------------------+
432   | sticky    | Specifies how the child window is positioned within the pane |
433   |           | area. Value is a string containing zero or more of the       |
434   |           | characters "n", "s", "e" or "w". Each letter refers to a     |
435   |           | side (north, south, east or west) that the child window will |
436   |           | stick to, as per the :meth:`grid` geometry manager.          |
437   +-----------+--------------------------------------------------------------+
438   | padding   | Specifies the amount of extra space to add between the       |
439   |           | notebook and this pane. Syntax is the same as for the option |
440   |           | padding used by this widget.                                 |
441   +-----------+--------------------------------------------------------------+
442   | text      | Specifies a text to be displayed in the tab.                 |
443   +-----------+--------------------------------------------------------------+
444   | image     | Specifies an image to display in the tab. See the option     |
445   |           | image described in :class:`Widget`.                          |
446   +-----------+--------------------------------------------------------------+
447   | compound  | Specifies how to display the image relative to the text, in  |
448   |           | the case both options text and image are present. See        |
449   |           | `Label Options`_ for legal values.                           |
450   +-----------+--------------------------------------------------------------+
451   | underline | Specifies the index (0-based) of a character to underline in |
452   |           | the text string. The underlined character is used for        |
453   |           | mnemonic activation if :meth:`Notebook.enable_traversal` is  |
454   |           | called.                                                      |
455   +-----------+--------------------------------------------------------------+
456
457
458Tab Identifiers
459^^^^^^^^^^^^^^^
460
461The tab_id present in several methods of :class:`ttk.Notebook` may take any
462of the following forms:
463
464* An integer between zero and the number of tabs
465* The name of a child window
466* A positional specification of the form "@x,y", which identifies the tab
467* The literal string "current", which identifies the currently-selected tab
468* The literal string "end", which returns the number of tabs (only valid for
469  :meth:`Notebook.index`)
470
471
472Virtual Events
473^^^^^^^^^^^^^^
474
475This widget generates a **<<NotebookTabChanged>>** virtual event after a new
476tab is selected.
477
478
479ttk.Notebook
480^^^^^^^^^^^^
481
482.. class:: Notebook
483
484   .. method:: add(child, **kw)
485
486      Adds a new tab to the notebook.
487
488      If window is currently managed by the notebook but hidden, it is
489      restored to its previous position.
490
491      See `Tab Options`_ for the list of available options.
492
493
494   .. method:: forget(tab_id)
495
496      Removes the tab specified by *tab_id*, unmaps and unmanages the
497      associated window.
498
499
500   .. method:: hide(tab_id)
501
502      Hides the tab specified by *tab_id*.
503
504      The tab will not be displayed, but the associated window remains
505      managed by the notebook and its configuration remembered. Hidden tabs
506      may be restored with the :meth:`add` command.
507
508
509   .. method:: identify(x, y)
510
511      Returns the name of the tab element at position *x*, *y*, or the empty
512      string if none.
513
514
515   .. method:: index(tab_id)
516
517      Returns the numeric index of the tab specified by *tab_id*, or the total
518      number of tabs if *tab_id* is the string "end".
519
520
521   .. method:: insert(pos, child, **kw)
522
523      Inserts a pane at the specified position.
524
525      *pos* is either the string "end", an integer index, or the name of a
526      managed child. If *child* is already managed by the notebook, moves it to
527      the specified position.
528
529      See `Tab Options`_ for the list of available options.
530
531
532   .. method:: select(tab_id=None)
533
534      Selects the specified *tab_id*.
535
536      The associated child window will be displayed, and the
537      previously-selected window (if different) is unmapped. If *tab_id* is
538      omitted, returns the widget name of the currently selected pane.
539
540
541   .. method:: tab(tab_id, option=None, **kw)
542
543      Query or modify the options of the specific *tab_id*.
544
545      If *kw* is not given, returns a dictionary of the tab option values. If
546      *option* is specified, returns the value of that *option*. Otherwise,
547      sets the options to the corresponding values.
548
549
550   .. method:: tabs()
551
552      Returns a list of windows managed by the notebook.
553
554
555   .. method:: enable_traversal()
556
557      Enable keyboard traversal for a toplevel window containing this notebook.
558
559      This will extend the bindings for the toplevel window containing the
560      notebook as follows:
561
562      * :kbd:`Control-Tab`: selects the tab following the currently selected one.
563      * :kbd:`Shift-Control-Tab`: selects the tab preceding the currently selected one.
564      * :kbd:`Alt-K`: where *K* is the mnemonic (underlined) character of any tab, will
565        select that tab.
566
567      Multiple notebooks in a single toplevel may be enabled for traversal,
568      including nested notebooks. However, notebook traversal only works
569      properly if all panes have the notebook they are in as master.
570
571
572Progressbar
573-----------
574
575The :class:`ttk.Progressbar` widget shows the status of a long-running
576operation. It can operate in two modes:  1) the determinate mode which shows the
577amount completed relative to the total amount of work to be done and 2) the
578indeterminate mode which provides an animated display to let the user know that
579work is progressing.
580
581
582Options
583^^^^^^^
584
585This widget accepts the following specific options:
586
587   .. tabularcolumns:: |l|L|
588
589   +----------+---------------------------------------------------------------+
590   | Option   | Description                                                   |
591   +==========+===============================================================+
592   | orient   | One of "horizontal" or "vertical". Specifies the orientation  |
593   |          | of the progress bar.                                          |
594   +----------+---------------------------------------------------------------+
595   | length   | Specifies the length of the long axis of the progress bar     |
596   |          | (width if horizontal, height if vertical).                    |
597   +----------+---------------------------------------------------------------+
598   | mode     | One of "determinate" or "indeterminate".                      |
599   +----------+---------------------------------------------------------------+
600   | maximum  | A number specifying the maximum value. Defaults to 100.       |
601   +----------+---------------------------------------------------------------+
602   | value    | The current value of the progress bar. In "determinate" mode, |
603   |          | this represents the amount of work completed. In              |
604   |          | "indeterminate" mode, it is interpreted as modulo *maximum*;  |
605   |          | that is, the progress bar completes one "cycle" when its value|
606   |          | increases by *maximum*.                                       |
607   +----------+---------------------------------------------------------------+
608   | variable | A name which is linked to the option value. If specified, the |
609   |          | value of the progress bar is automatically set to the value of|
610   |          | this name whenever the latter is modified.                    |
611   +----------+---------------------------------------------------------------+
612   | phase    | Read-only option. The widget periodically increments the value|
613   |          | of this option whenever its value is greater than 0 and, in   |
614   |          | determinate mode, less than maximum. This option may be used  |
615   |          | by the current theme to provide additional animation effects. |
616   +----------+---------------------------------------------------------------+
617
618
619ttk.Progressbar
620^^^^^^^^^^^^^^^
621
622.. class:: Progressbar
623
624   .. method:: start(interval=None)
625
626      Begin autoincrement mode: schedules a recurring timer event that calls
627      :meth:`Progressbar.step` every *interval* milliseconds. If omitted,
628      *interval* defaults to 50 milliseconds.
629
630
631   .. method:: step(amount=None)
632
633      Increments the progress bar's value by *amount*.
634
635      *amount* defaults to 1.0 if omitted.
636
637
638   .. method:: stop()
639
640      Stop autoincrement mode: cancels any recurring timer event initiated by
641      :meth:`Progressbar.start` for this progress bar.
642
643
644Separator
645---------
646
647The :class:`ttk.Separator` widget displays a horizontal or vertical separator
648bar.
649
650It has no other methods besides the ones inherited from :class:`ttk.Widget`.
651
652
653Options
654^^^^^^^
655
656This widget accepts the following specific option:
657
658   .. tabularcolumns:: |l|L|
659
660   +--------+----------------------------------------------------------------+
661   | Option | Description                                                    |
662   +========+================================================================+
663   | orient | One of "horizontal" or "vertical". Specifies the orientation of|
664   |        | the separator.                                                 |
665   +--------+----------------------------------------------------------------+
666
667
668Sizegrip
669--------
670
671The :class:`ttk.Sizegrip` widget (also known as a grow box) allows the user to
672resize the containing toplevel window by pressing and dragging the grip.
673
674This widget has neither specific options nor specific methods, besides the
675ones inherited from :class:`ttk.Widget`.
676
677
678Platform-specific notes
679^^^^^^^^^^^^^^^^^^^^^^^
680
681* On MacOS X, toplevel windows automatically include a built-in size grip
682  by default. Adding a :class:`Sizegrip` is harmless, since the built-in
683  grip will just mask the widget.
684
685
686Bugs
687^^^^
688
689* If the containing toplevel's position was specified relative to the right
690  or bottom of the screen (e.g. ....), the :class:`Sizegrip` widget will
691  not resize the window.
692* This widget supports only "southeast" resizing.
693
694
695Treeview
696--------
697
698The :class:`ttk.Treeview` widget displays a hierarchical collection of items.
699Each item has a textual label, an optional image, and an optional list of data
700values. The data values are displayed in successive columns after the tree
701label.
702
703The order in which data values are displayed may be controlled by setting
704the widget option ``displaycolumns``. The tree widget can also display column
705headings. Columns may be accessed by number or symbolic names listed in the
706widget option columns. See `Column Identifiers`_.
707
708Each item is identified by a unique name. The widget will generate item IDs
709if they are not supplied by the caller. There is a distinguished root item,
710named ``{}``. The root item itself is not displayed; its children appear at the
711top level of the hierarchy.
712
713Each item also has a list of tags, which can be used to associate event bindings
714with individual items and control the appearance of the item.
715
716The Treeview widget supports horizontal and vertical scrolling, according to
717the options described in `Scrollable Widget Options`_ and the methods
718:meth:`Treeview.xview` and :meth:`Treeview.yview`.
719
720
721Options
722^^^^^^^
723
724This widget accepts the following specific options:
725
726   .. tabularcolumns:: |l|p{0.7\linewidth}|
727
728   +----------------+--------------------------------------------------------+
729   | Option         | Description                                            |
730   +================+========================================================+
731   | columns        | A list of column identifiers, specifying the number of |
732   |                | columns and their names.                               |
733   +----------------+--------------------------------------------------------+
734   | displaycolumns | A list of column identifiers (either symbolic or       |
735   |                | integer indices) specifying which data columns are     |
736   |                | displayed and the order in which they appear, or the   |
737   |                | string "#all".                                         |
738   +----------------+--------------------------------------------------------+
739   | height         | Specifies the number of rows which should be visible.  |
740   |                | Note: the requested width is determined from the sum   |
741   |                | of the column widths.                                  |
742   +----------------+--------------------------------------------------------+
743   | padding        | Specifies the internal padding for the widget. The     |
744   |                | padding is a list of up to four length specifications. |
745   +----------------+--------------------------------------------------------+
746   | selectmode     | Controls how the built-in class bindings manage the    |
747   |                | selection. One of "extended", "browse" or "none".      |
748   |                | If set to "extended" (the default), multiple items may |
749   |                | be selected. If "browse", only a single item will be   |
750   |                | selected at a time. If "none", the selection will not  |
751   |                | be changed.                                            |
752   |                |                                                        |
753   |                | Note that the application code and tag bindings can set|
754   |                | the selection however they wish, regardless of the     |
755   |                | value  of this option.                                 |
756   +----------------+--------------------------------------------------------+
757   | show           | A list containing zero or more of the following values,|
758   |                | specifying which elements of the tree to display.      |
759   |                |                                                        |
760   |                | * tree: display tree labels in column #0.              |
761   |                | * headings: display the heading row.                   |
762   |                |                                                        |
763   |                | The default is "tree headings", i.e., show all         |
764   |                | elements.                                              |
765   |                |                                                        |
766   |                | **Note**: Column #0 always refers to the tree column,  |
767   |                | even if show="tree" is not specified.                  |
768   +----------------+--------------------------------------------------------+
769
770
771Item Options
772^^^^^^^^^^^^
773
774The following item options may be specified for items in the insert and item
775widget commands.
776
777   .. tabularcolumns:: |l|L|
778
779   +--------+---------------------------------------------------------------+
780   | Option | Description                                                   |
781   +========+===============================================================+
782   | text   | The textual label to display for the item.                    |
783   +--------+---------------------------------------------------------------+
784   | image  | A Tk Image, displayed to the left of the label.               |
785   +--------+---------------------------------------------------------------+
786   | values | The list of values associated with the item.                  |
787   |        |                                                               |
788   |        | Each item should have the same number of values as the widget |
789   |        | option columns. If there are fewer values than columns, the   |
790   |        | remaining values are assumed empty. If there are more values  |
791   |        | than columns, the extra values are ignored.                   |
792   +--------+---------------------------------------------------------------+
793   | open   | True/False value indicating whether the item's children should|
794   |        | be displayed or hidden.                                       |
795   +--------+---------------------------------------------------------------+
796   | tags   | A list of tags associated with this item.                     |
797   +--------+---------------------------------------------------------------+
798
799
800Tag Options
801^^^^^^^^^^^
802
803The following options may be specified on tags:
804
805   .. tabularcolumns:: |l|L|
806
807   +------------+-----------------------------------------------------------+
808   | Option     | Description                                               |
809   +============+===========================================================+
810   | foreground | Specifies the text foreground color.                      |
811   +------------+-----------------------------------------------------------+
812   | background | Specifies the cell or item background color.              |
813   +------------+-----------------------------------------------------------+
814   | font       | Specifies the font to use when drawing text.              |
815   +------------+-----------------------------------------------------------+
816   | image      | Specifies the item image, in case the item's image option |
817   |            | is empty.                                                 |
818   +------------+-----------------------------------------------------------+
819
820
821Column Identifiers
822^^^^^^^^^^^^^^^^^^
823
824Column identifiers take any of the following forms:
825
826* A symbolic name from the list of columns option.
827* An integer n, specifying the nth data column.
828* A string of the form #n, where n is an integer, specifying the nth display
829  column.
830
831Notes:
832
833* Item's option values may be displayed in a different order than the order
834  in which they are stored.
835* Column #0 always refers to the tree column, even if show="tree" is not
836  specified.
837
838A data column number is an index into an item's option values list; a display
839column number is the column number in the tree where the values are displayed.
840Tree labels are displayed in column #0. If option displaycolumns is not set,
841then data column n is displayed in column #n+1. Again, **column #0 always
842refers to the tree column**.
843
844
845Virtual Events
846^^^^^^^^^^^^^^
847
848The Treeview widget generates the following virtual events.
849
850   .. tabularcolumns:: |l|L|
851
852   +--------------------+--------------------------------------------------+
853   | Event              | Description                                      |
854   +====================+==================================================+
855   | <<TreeviewSelect>> | Generated whenever the selection changes.        |
856   +--------------------+--------------------------------------------------+
857   | <<TreeviewOpen>>   | Generated just before settings the focus item to |
858   |                    | open=True.                                       |
859   +--------------------+--------------------------------------------------+
860   | <<TreeviewClose>>  | Generated just after setting the focus item to   |
861   |                    | open=False.                                      |
862   +--------------------+--------------------------------------------------+
863
864The :meth:`Treeview.focus` and :meth:`Treeview.selection` methods can be used
865to determine the affected item or items.
866
867
868ttk.Treeview
869^^^^^^^^^^^^
870
871.. class:: Treeview
872
873   .. method:: bbox(item, column=None)
874
875      Returns the bounding box (relative to the treeview widget's window) of
876      the specified *item* in the form (x, y, width, height).
877
878      If *column* is specified, returns the bounding box of that cell. If the
879      *item* is not visible (i.e., if it is a descendant of a closed item or is
880      scrolled offscreen), returns an empty string.
881
882
883   .. method:: get_children(item=None)
884
885      Returns the list of children belonging to *item*.
886
887      If *item* is not specified, returns root children.
888
889
890   .. method:: set_children(item, *newchildren)
891
892      Replaces *item*'s child with *newchildren*.
893
894      Children present in *item* that are not present in *newchildren* are
895      detached from the tree. No items in *newchildren* may be an ancestor of
896      *item*. Note that not specifying *newchildren* results in detaching
897      *item*'s children.
898
899
900   .. method:: column(column, option=None, **kw)
901
902      Query or modify the options for the specified *column*.
903
904      If *kw* is not given, returns a dict of the column option values. If
905      *option* is specified then the value for that *option* is returned.
906      Otherwise, sets the options to the corresponding values.
907
908      The valid options/values are:
909
910      * id
911         Returns the column name. This is a read-only option.
912      * anchor: One of the standard Tk anchor values.
913         Specifies how the text in this column should be aligned with respect
914         to the cell.
915      * minwidth: width
916         The minimum width of the column in pixels. The treeview widget will
917         not make the column any smaller than specified by this option when
918         the widget is resized or the user drags a column.
919      * stretch: True/False
920         Specifies whether the column's width should be adjusted when
921         the widget is resized.
922      * width: width
923         The width of the column in pixels.
924
925      To configure the tree column, call this with column = "#0"
926
927   .. method:: delete(*items)
928
929      Delete all specified *items* and all their descendants.
930
931      The root item may not be deleted.
932
933
934   .. method:: detach(*items)
935
936      Unlinks all of the specified *items* from the tree.
937
938      The items and all of their descendants are still present, and may be
939      reinserted at another point in the tree, but will not be displayed.
940
941      The root item may not be detached.
942
943
944   .. method:: exists(item)
945
946      Returns ``True`` if the specified *item* is present in the tree.
947
948
949   .. method:: focus(item=None)
950
951      If *item* is specified, sets the focus item to *item*. Otherwise, returns
952      the current focus item, or '' if there is none.
953
954
955   .. method:: heading(column, option=None, **kw)
956
957      Query or modify the heading options for the specified *column*.
958
959      If *kw* is not given, returns a dict of the heading option values. If
960      *option* is specified then the value for that *option* is returned.
961      Otherwise, sets the options to the corresponding values.
962
963      The valid options/values are:
964
965      * text: text
966         The text to display in the column heading.
967      * image: imageName
968         Specifies an image to display to the right of the column heading.
969      * anchor: anchor
970         Specifies how the heading text should be aligned. One of the standard
971         Tk anchor values.
972      * command: callback
973         A callback to be invoked when the heading label is pressed.
974
975      To configure the tree column heading, call this with column = "#0".
976
977
978   .. method:: identify(component, x, y)
979
980      Returns a description of the specified *component* under the point given
981      by *x* and *y*, or the empty string if no such *component* is present at
982      that position.
983
984
985   .. method:: identify_row(y)
986
987      Returns the item ID of the item at position *y*.
988
989
990   .. method:: identify_column(x)
991
992      Returns the data column identifier of the cell at position *x*.
993
994      The tree column has ID #0.
995
996
997   .. method:: identify_region(x, y)
998
999      Returns one of:
1000
1001      +-----------+--------------------------------------+
1002      | region    | meaning                              |
1003      +===========+======================================+
1004      | heading   | Tree heading area.                   |
1005      +-----------+--------------------------------------+
1006      | separator | Space between two columns headings.  |
1007      +-----------+--------------------------------------+
1008      | tree      | The tree area.                       |
1009      +-----------+--------------------------------------+
1010      | cell      | A data cell.                         |
1011      +-----------+--------------------------------------+
1012
1013      Availability: Tk 8.6.
1014
1015
1016   .. method:: identify_element(x, y)
1017
1018      Returns the element at position *x*, *y*.
1019
1020      Availability: Tk 8.6.
1021
1022
1023   .. method:: index(item)
1024
1025      Returns the integer index of *item* within its parent's list of children.
1026
1027
1028   .. method:: insert(parent, index, iid=None, **kw)
1029
1030      Creates a new item and returns the item identifier of the newly created
1031      item.
1032
1033      *parent* is the item ID of the parent item, or the empty string to create
1034      a new top-level item. *index* is an integer, or the value "end",
1035      specifying where in the list of parent's children to insert the new item.
1036      If *index* is less than or equal to zero, the new node is inserted at
1037      the beginning; if *index* is greater than or equal to the current number
1038      of children, it is inserted at the end. If *iid* is specified, it is used
1039      as the item identifier; *iid* must not already exist in the tree.
1040      Otherwise, a new unique identifier is generated.
1041
1042      See `Item Options`_ for the list of available points.
1043
1044
1045   .. method:: item(item, option=None, **kw)
1046
1047      Query or modify the options for the specified *item*.
1048
1049      If no options are given, a dict with options/values for the item is
1050      returned.
1051      If *option* is specified then the value for that option is returned.
1052      Otherwise, sets the options to the corresponding values as given by *kw*.
1053
1054
1055   .. method:: move(item, parent, index)
1056
1057      Moves *item* to position *index* in *parent*'s list of children.
1058
1059      It is illegal to move an item under one of its descendants. If *index* is
1060      less than or equal to zero, *item* is moved to the beginning; if greater
1061      than or equal to the number of children, it is moved to the end. If *item*
1062      was detached it is reattached.
1063
1064
1065   .. method:: next(item)
1066
1067      Returns the identifier of *item*'s next sibling, or '' if *item* is the
1068      last child of its parent.
1069
1070
1071   .. method:: parent(item)
1072
1073      Returns the ID of the parent of *item*, or '' if *item* is at the top
1074      level of the hierarchy.
1075
1076
1077   .. method:: prev(item)
1078
1079      Returns the identifier of *item*'s previous sibling, or '' if *item* is
1080      the first child of its parent.
1081
1082
1083   .. method:: reattach(item, parent, index)
1084
1085      An alias for :meth:`Treeview.move`.
1086
1087
1088   .. method:: see(item)
1089
1090      Ensure that *item* is visible.
1091
1092      Sets all of *item*'s ancestors open option to ``True``, and scrolls the
1093      widget if necessary so that *item* is within the visible portion of
1094      the tree.
1095
1096
1097   .. method:: selection(selop=None, items=None)
1098
1099      If *selop* is not specified, returns selected items. Otherwise, it will
1100      act according to the following selection methods.
1101
1102
1103   .. method:: selection_set(items)
1104
1105      *items* becomes the new selection.
1106
1107
1108   .. method:: selection_add(items)
1109
1110      Add *items* to the selection.
1111
1112
1113   .. method:: selection_remove(items)
1114
1115      Remove *items* from the selection.
1116
1117
1118   .. method:: selection_toggle(items)
1119
1120      Toggle the selection state of each item in *items*.
1121
1122
1123   .. method:: set(item, column=None, value=None)
1124
1125      With one argument, returns a dictionary of column/value pairs for the
1126      specified *item*. With two arguments, returns the current value of the
1127      specified *column*. With three arguments, sets the value of given
1128      *column* in given *item* to the specified *value*.
1129
1130
1131   .. method:: tag_bind(tagname, sequence=None, callback=None)
1132
1133      Bind a callback for the given event *sequence* to the tag *tagname*.
1134      When an event is delivered to an item, the callbacks for each of the
1135      item's tags option are called.
1136
1137
1138   .. method:: tag_configure(tagname, option=None, **kw)
1139
1140      Query or modify the options for the specified *tagname*.
1141
1142      If *kw* is not given, returns a dict of the option settings for
1143      *tagname*. If *option* is specified, returns the value for that *option*
1144      for the specified *tagname*. Otherwise, sets the options to the
1145      corresponding values for the given *tagname*.
1146
1147
1148   .. method:: tag_has(tagname, item=None)
1149
1150      If *item* is specified, returns 1 or 0 depending on whether the specified
1151      *item* has the given *tagname*. Otherwise, returns a list of all items
1152      that have the specified tag.
1153
1154      Availability: Tk 8.6
1155
1156
1157   .. method:: xview(*args)
1158
1159      Query or modify horizontal position of the treeview.
1160
1161
1162   .. method:: yview(*args)
1163
1164      Query or modify vertical position of the treeview.
1165
1166
1167.. _TtkStyling:
1168
1169Ttk Styling
1170-----------
1171
1172Each widget in :mod:`ttk` is assigned a style, which specifies the set of
1173elements making up the widget and how they are arranged, along with dynamic
1174and default settings for element options. By default the style name is the
1175same as the widget's class name, but it may be overridden by the widget's style
1176option. If you don't know the class name of a widget, use the method
1177:meth:`Misc.winfo_class` (somewidget.winfo_class()).
1178
1179.. seealso::
1180
1181   `Tcl'2004 conference presentation <http://tktable.sourceforge.net/tile/tile-tcl2004.pdf>`_
1182      This document explains how the theme engine works
1183
1184
1185.. class:: Style
1186
1187   This class is used to manipulate the style database.
1188
1189
1190   .. method:: configure(style, query_opt=None, **kw)
1191
1192      Query or set the default value of the specified option(s) in *style*.
1193
1194      Each key in *kw* is an option and each value is a string identifying
1195      the value for that option.
1196
1197      For example, to change every default button to be a flat button with
1198      some padding and a different background color::
1199
1200         from tkinter import ttk
1201         import tkinter
1202
1203         root = tkinter.Tk()
1204
1205         ttk.Style().configure("TButton", padding=6, relief="flat",
1206            background="#ccc")
1207
1208         btn = ttk.Button(text="Sample")
1209         btn.pack()
1210
1211         root.mainloop()
1212
1213
1214   .. method:: map(style, query_opt=None, **kw)
1215
1216      Query or sets dynamic values of the specified option(s) in *style*.
1217
1218      Each key in *kw* is an option and each value should be a list or a
1219      tuple (usually) containing statespecs grouped in tuples, lists, or
1220      some other preference. A statespec is a compound of one
1221      or more states and then a value.
1222
1223      An example may make it more understandable::
1224
1225         import tkinter
1226         from tkinter import ttk
1227
1228         root = tkinter.Tk()
1229
1230         style = ttk.Style()
1231         style.map("C.TButton",
1232             foreground=[('pressed', 'red'), ('active', 'blue')],
1233             background=[('pressed', '!disabled', 'black'), ('active', 'white')]
1234             )
1235
1236         colored_btn = ttk.Button(text="Test", style="C.TButton").pack()
1237
1238         root.mainloop()
1239
1240
1241      Note that the order of the (states, value) sequences for an option does
1242      matter, if the order is changed to ``[('active', 'blue'), ('pressed',
1243      'red')]`` in the foreground option, for example, the result would be a
1244      blue foreground when the widget were in active or pressed states.
1245
1246
1247   .. method:: lookup(style, option, state=None, default=None)
1248
1249      Returns the value specified for *option* in *style*.
1250
1251      If *state* is specified, it is expected to be a sequence of one or more
1252      states. If the *default* argument is set, it is used as a fallback value
1253      in case no specification for option is found.
1254
1255      To check what font a Button uses by default::
1256
1257         from tkinter import ttk
1258
1259         print(ttk.Style().lookup("TButton", "font"))
1260
1261
1262   .. method:: layout(style, layoutspec=None)
1263
1264      Define the widget layout for given *style*. If *layoutspec* is omitted,
1265      return the layout specification for given style.
1266
1267      *layoutspec*, if specified, is expected to be a list or some other
1268      sequence type (excluding strings), where each item should be a tuple and
1269      the first item is the layout name and the second item should have the
1270      format described in `Layouts`_.
1271
1272      To understand the format, see the following example (it is not
1273      intended to do anything useful)::
1274
1275         from tkinter import ttk
1276         import tkinter
1277
1278         root = tkinter.Tk()
1279
1280         style = ttk.Style()
1281         style.layout("TMenubutton", [
1282            ("Menubutton.background", None),
1283            ("Menubutton.button", {"children":
1284                [("Menubutton.focus", {"children":
1285                    [("Menubutton.padding", {"children":
1286                        [("Menubutton.label", {"side": "left", "expand": 1})]
1287                    })]
1288                })]
1289            }),
1290         ])
1291
1292         mbtn = ttk.Menubutton(text='Text')
1293         mbtn.pack()
1294         root.mainloop()
1295
1296
1297   .. method:: element_create(elementname, etype, *args, **kw)
1298
1299      Create a new element in the current theme, of the given *etype* which is
1300      expected to be either "image", "from" or "vsapi". The latter is only
1301      available in Tk 8.6a for Windows XP and Vista and is not described here.
1302
1303      If "image" is used, *args* should contain the default image name followed
1304      by statespec/value pairs (this is the imagespec), and *kw* may have the
1305      following options:
1306
1307       * border=padding
1308          padding is a list of up to four integers, specifying the left, top,
1309          right, and bottom borders, respectively.
1310
1311       * height=height
1312          Specifies a minimum height for the element. If less than zero, the
1313          base image's height is used as a default.
1314
1315       * padding=padding
1316          Specifies the element's interior padding. Defaults to border's value
1317          if not specified.
1318
1319       * sticky=spec
1320          Specifies how the image is placed within the final parcel. spec
1321          contains zero or more characters "n", "s", "w", or "e".
1322
1323       * width=width
1324          Specifies a minimum width for the element. If less than zero, the
1325          base image's width is used as a default.
1326
1327      If "from" is used as the value of *etype*,
1328      :meth:`element_create` will clone an existing
1329      element. *args* is expected to contain a themename, from which
1330      the element will be cloned, and optionally an element to clone from.
1331      If this element to clone from is not specified, an empty element will
1332      be used. *kw* is discarded.
1333
1334
1335   .. method:: element_names()
1336
1337      Returns the list of elements defined in the current theme.
1338
1339
1340   .. method:: element_options(elementname)
1341
1342      Returns the list of *elementname*'s options.
1343
1344
1345   .. method:: theme_create(themename, parent=None, settings=None)
1346
1347      Create a new theme.
1348
1349      It is an error if *themename* already exists. If *parent* is specified,
1350      the new theme will inherit styles, elements and layouts from the parent
1351      theme. If *settings* are present they are expected to have the same
1352      syntax used for :meth:`theme_settings`.
1353
1354
1355   .. method:: theme_settings(themename, settings)
1356
1357      Temporarily sets the current theme to *themename*, apply specified
1358      *settings* and then restore the previous theme.
1359
1360      Each key in *settings* is a style and each value may contain the keys
1361      'configure', 'map', 'layout' and 'element create' and they are expected
1362      to have the same format as specified by the methods
1363      :meth:`Style.configure`, :meth:`Style.map`, :meth:`Style.layout` and
1364      :meth:`Style.element_create` respectively.
1365
1366      As an example, let's change the Combobox for the default theme a bit::
1367
1368         from tkinter import ttk
1369         import tkinter
1370
1371         root = tkinter.Tk()
1372
1373         style = ttk.Style()
1374         style.theme_settings("default", {
1375            "TCombobox": {
1376                "configure": {"padding": 5},
1377                "map": {
1378                    "background": [("active", "green2"),
1379                                   ("!disabled", "green4")],
1380                    "fieldbackground": [("!disabled", "green3")],
1381                    "foreground": [("focus", "OliveDrab1"),
1382                                   ("!disabled", "OliveDrab2")]
1383                }
1384            }
1385         })
1386
1387         combo = ttk.Combobox().pack()
1388
1389         root.mainloop()
1390
1391
1392   .. method:: theme_names()
1393
1394      Returns a list of all known themes.
1395
1396
1397   .. method:: theme_use(themename=None)
1398
1399      If *themename* is not given, returns the theme in use.  Otherwise, sets
1400      the current theme to *themename*, refreshes all widgets and emits a
1401      <<ThemeChanged>> event.
1402
1403
1404Layouts
1405^^^^^^^
1406
1407A layout can be just ``None``, if it takes no options, or a dict of
1408options specifying how to arrange the element. The layout mechanism
1409uses a simplified version of the pack geometry manager: given an
1410initial cavity, each element is allocated a parcel. Valid
1411options/values are:
1412
1413 * side: whichside
1414    Specifies which side of the cavity to place the element; one of
1415    top, right, bottom or left. If omitted, the element occupies the
1416    entire cavity.
1417
1418 * sticky: nswe
1419    Specifies where the element is placed inside its allocated parcel.
1420
1421 * unit: 0 or 1
1422    If set to 1, causes the element and all of its descendants to be treated as
1423    a single element for the purposes of :meth:`Widget.identify` et al. It's
1424    used for things like scrollbar thumbs with grips.
1425
1426 * children: [sublayout... ]
1427    Specifies a list of elements to place inside the element. Each
1428    element is a tuple (or other sequence type) where the first item is
1429    the layout name, and the other is a `Layout`_.
1430
1431.. _Layout: `Layouts`_
1432