25.2. tkinter.ttk - Tk主题窗口小部件

源代码: Lib / tkinter / ttk.py

tkinter.ttk模块提供对Tk 8.5中介绍的Tk主题控件集的访问。如果Python没有针对Tk 8.5编译,如果Tile已经安装,这个模块仍然可以被访问。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).

tkinter.ttk的基本思想是尽可能地从实现其外观的代码中分离实现窗口小部件行为的代码。

也可以看看

Tk小部件样式支持
一个介绍Tk支持的文档

25.2.1. Using Ttk

要开始使用Ttk,请导入其模块:

from tkinter import ttk

要覆盖基本的Tk小部件,导入应该遵循Tk导入:

from tkinter import *
from tkinter.ttk import *

That code causes several tkinter.ttk widgets (Button, Checkbutton, Entry, Frame, Label, LabelFrame, Menubutton, PanedWindow, Radiobutton, Scale and Scrollbar) to automatically replace the Tk widgets.

这具有使用新的小部件的直接好处,其提供了跨平台的更好的外观和感觉;但是,替换窗口小部件不完全兼容。主要的区别是小部件选项,如“fg”,“bg”和其他与小部件样式相关的不再存在于Ttk小部件中。而应使用ttk.Style类来改进样式效果。

也可以看看

将现有应用程序转换为使用Tile小部件
关于在移动应用程序以使用新窗口小部件时通常遇到的差异的专着(使用Tcl术语)。

25.2.2. Ttk Widgets

Ttk comes with 17 widgets, eleven of which already existed in tkinter: Button, Checkbutton, Entry, Frame, Label, LabelFrame, Menubutton, PanedWindow, Radiobutton, Scale and Scrollbar. 其他六个是新的:ComboboxNotebookProgressbarSeparatorSizegripTreeview它们都是Widget的子类。

使用Ttk小部件为应用程序提供了改进的外观和感觉。如上所述,在样式被如何编码方面存在差异。

Tk代码:

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

Ttk代码:

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

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

有关TtkStyling的详细信息,请参阅Style类文档。

25.2.3. Widget

ttk.Widget defines standard options and methods supported by Tk themed widgets and is not supposed to be directly instantiated.

25.2.3.1. Standard Options

所有ttk小部件接受以下选项:

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.

25.2.3.2. Scrollable Widget Options

由滚动条控制的窗口小部件支持以下选项。

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 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.

25.2.3.3. Label Options

标签,按钮和其他按钮状小部件支持以下选项。

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 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.

25.2.3.4. Compatibility Options

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 Widget.state() method does not affect this option.

25.2.3.5. Widget States

窗口小部件状态是独立状态标志的位图。

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

状态规范是状态名称的序列,可选地以指示位被关闭的感叹号作为前缀。

25.2.3.6. ttk.Widget

除了下面描述的方法,ttk.Widget支持方法tkinter.Widget.cget()tkinter.Widget.configure()

class tkinter.ttk.Widget
identify(x, y)

返回位置x y处元素的名称,如果该点不在任何元素内,则返回空字符串。

xy是相对于窗口小部件的像素坐标。

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

测试窗口小部件的状态。如果未指定回调,如果窗口小部件状态与statespec匹配,并且False,则返回True如果指定回调,则如果窗口小部件状态与statespec匹配,则使用args调用。

state(statespec=None)

修改或查询窗口小部件状态。如果指定statespec,则根据它设置窗口小部件状态,并返回一个新的statespec,指示哪些标志已更改。如果未指定statespec,则返回当前启用的状态标志。

statespec通常是一个列表或元组。

25.2.4. Combobox

ttk.Combobox小部件将文本字段与下拉列表的值组合在一起。此小部件是Entry的子类。

Besides the methods inherited from Widget: Widget.cget(), Widget.configure(), Widget.identify(), Widget.instate() and Widget.state(), and the following inherited from Entry: Entry.bbox(), Entry.delete(), Entry.icursor(), Entry.index(), Entry.insert(), Entry.selection(), Entry.xview(), it has some other methods, described at ttk.Combobox.

25.2.4.1. Options

此窗口小部件接受以下特定选项:

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 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.

25.2.4.2. Virtual events

当用户从值列表中选择一个元素时,组合框窗口小部件会生成<< ComboboxSelected>>

25.2.4.3. ttk.Combobox

class tkinter.ttk.Combobox
current(newindex=None)

如果指定newindex,则将组合框值设置为元素位置newindex否则,返回当前值的索引或-1,如果当前值不在值列表中。

get()

set(value)

将组合框的值设置为value

25.2.5. Notebook

Ttk Notebook小部件管理一个容器的窗口,并一次显示一个。每个子窗口与标签相关联,用户可以选择该标签来改变当前显示的窗口。

25.2.5.1. Options

此窗口小部件接受以下特定选项:

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.

25.2.5.2. Tab Options

还有标签的特定选项:

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 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 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 Notebook.enable_traversal() is called.

25.2.5.3. Tab Identifiers

ttk.Notebook的几个方法中存在的tab_id可以采用以下任何形式:

  • 零与标签数之间的整数
  • 子窗口的名称
  • 用于标识选项卡的形式“@ x,y”的位置规范
  • 字面值字符串“current”,它标识当前选择的选项卡
  • 字面值字符串“end”,它返回制表符的数量(仅对Notebook.index()有效)

25.2.5.4. Virtual Events

在选择新标签页后,此窗口小部件会生成<< NotebookTabChanged>>虚拟事件。

25.2.5.5. ttk.Notebook

class tkinter.ttk.Notebook
add(child, **kw)

将新标签添加到笔记本。

如果窗口当前由笔记本管理,但是被隐藏,则它被恢复到其先前的位置。

有关可用选项列表,请参阅标签选项

forget(tab_id)

删除tab_id指定的标签,取消映射并取消管理关联的窗口。

hide(tab_id)

隐藏由tab_id指定的标签。

将不显示该选项卡,但相关窗口仍由笔记本管理并记住其配置。可以使用add()命令恢复隐藏的标签。

identify(x, y)

返回位置xy处的tab元素的名称,如果没有则返回空字符串。

index(tab_id)

返回tab_id指定的标签的数字索引,如果tab_id是字符串“end”,则返回标签总数。

insert(pos, child, **kw)

在指定位置插入窗格。

pos是字符串“end”,整数索引或托管子项的名称。如果已由笔记本管理,请将其移动到指定位置。

有关可用选项列表,请参阅标签选项

select(tab_id=None)

选择指定的tab_id

将显示相关的子窗口,并且先前选择的窗口(如果不同)被取消映射。如果省略tab_id,则返回当前选定窗格的窗口小部件名称。

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

查询或修改特定tab_id的选项。

如果未给出kw,则返回选项卡选项值的字典。如果指定选项,则返回选项的值。否则,将选项设置为相应的值。

tabs()

返回由笔记本管理的窗口列表。

enable_traversal()

为包含此笔记本的顶层窗口启用键盘遍历。

这将扩展包含笔记本的toplevel窗口的绑定,如下所示:

  • Control-Tab:选择当前选择的标签。
  • Shift-Control-Tab:选择当前选择的标签之前的标签。
  • Alt-K:其中K是任何标签的助记符(下划线)字符,将选择该标签。

可以启用单个顶层中的多个笔记本,以便遍历,包括嵌套的笔记本。但是,如果所有窗格都具有作为主窗口的笔记本,笔记本遍历才能正常工作。

25.2.6. Progressbar

ttk.Progressbar小部件显示长时间运行的操作的状态。它可以在两种模式下操作:1)确定模式,其示出相对于要完成的总工作量完成的量,以及2)不确定模式,其提供动画显示以使用户知道工作正在进行。

25.2.6.1. Options

此窗口小部件接受以下特定选项:

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.

25.2.6.2. ttk.Progressbar

class tkinter.ttk.Progressbar
start(interval=None)

开始自动递增模式:计划每隔间隔毫秒调用Progressbar.step()的重复计时器事件。如果省略,interval默认为50毫秒。

step(amount=None)

将进度栏的值增加amount

如果省略,amount默认为1.0。

stop()

停止自动递增模式:取消由此进度条的Progressbar.start()发起的任何重复的计时器事件。

25.2.7. Separator

ttk.Separator小部件显示水平或垂直分隔栏。

除了继承自ttk.Widget的方法,它没有其他方法。

25.2.7.1. Options

此窗口小部件接受以下特定选项:

Option Description
orient One of “horizontal” or “vertical”. Specifies the orientation of the separator.

25.2.8. Sizegrip

ttk.Sizegrip小部件(也称为增长框)允许用户通过按住并拖动手柄来调整包含顶层窗口的大小。

除了继承自ttk.Widget的方法,此窗口小部件既没有特定的选项也没有特定的方法。

25.2.8.1. Platform-specific notes

  • 在MacOS X上,默认情况下,顶级窗口会自动包括内建尺寸夹点。添加Sizegrip是无害的,因为内建抓握只会掩盖小部件。

25.2.8.2. Bugs

  • 如果包含顶层的位置是相对于屏幕的右侧或底部指定的(例如,....),Sizegrip小部件将不会调整窗口大小。
  • 此小部件仅支持“东南”调整大小。

25.2.9. Treeview

ttk.Treeview小部件显示项目的层次结构。每个项目都有一个文本标签,一个可选的图像和一个可选的数据值列表。数据值显示在树标签后的连续列中。

可以通过设置窗口小部件选项displaycolumns来控制显示数据值的顺序。树窗口小部件还可以显示列标题。列可以通过窗口小部件选项列中列出的数字或符号名访问。请参见列标识符

每个项目由唯一的名称标识。如果调用者不提供该窗口小部件,则它将生成项目ID。有一个显着的根项目,命名为{}根项目本身不显示;它的孩子出现在层次结构的顶层。

每个项目还具有标签列表,其可以用于将事件绑定与单独的项目相关联并且控制项目的外观。

根据可滚动小部件选项中描述的选项以及方法Treeview.xview()Treeview.yview()

25.2.9.1. Options

此窗口小部件接受以下特定选项:

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.

25.2.9.2. Item Options

可以为插入和项目窗口小部件命令中的项目指定以下项目选项。

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.

25.2.9.3. Tag Options

可以在标记上指定以下选项:

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.

25.2.9.4. Column Identifiers

列标识符采用以下任何形式:

  • 列列表中的符号名称选项。
  • 整数n,指定第n个数据列。
  • 一个形式为#n的字符串,其中n是一个整数,指定第n个显示列。

笔记:

  • 项目的选项值可以按与存储它们的顺序不同的顺序显示。
  • 列#0始终引用树列,即使未指定show =“tree”。

数据列号是项目的选项值列表中的索引;显示列编号是显示值的树中的列编号。树标签显示在列#0中。如果未设置选项显示列,则在列#n + 1中显示数据列n。同样,列#0始终引用树列

25.2.9.5. Virtual Events

Treeview窗口小部件生成以下虚拟事件。

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.

Treeview.focus()Treeview.selection()方法可用于确定受影响的项目。

25.2.9.6. ttk.Treeview

class tkinter.ttk.Treeview
bbox(item, column=None)

返回以(x,y,width,height)形式指定的的边界框(相对于树视图窗口小部件的窗口)。

如果指定,则返回该单元格的边框。如果不可见(即,如果它是已关闭项的后代或在屏幕外滚动),则返回一个空字符串。

get_children(item=None)

返回属于的子项列表。

如果未指定,则返回根子节点。

set_children(item, *newchildren)

项目的子项替换为新生子

存在于项目中的新生儿中不存在的儿童将从树中分离。newchildren中没有任何项目可能是项目的祖先。请注意,不指定newchildren会导致分离的子项。

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

查询或修改指定的选项。

如果未给出kw,则返回列选项值的dict。如果指定选项,则返回选项的值。否则,将选项设置为相应的值。

有效的选项/值为:

  • ID

    返回列名称。这是一个只读选项。

  • anchor:标准Tk锚值之一。

    指定此列中的文本如何相对于单元格对齐。

  • minwidth:width

    列的最小宽度(以像素为单位)。当窗口小部件调整大小或用户拖动列时,树视图窗口小部件不会使列小于此选项指定的值。

  • stretch:True / False

    指定在调整窗口小部件时是否应调整列的宽度。

  • width:width

    列的宽度(以像素为单位)。

要配置树列,请使用column =“#0”

delete(*items)

删除所有指定的项目及其所有后代。

根项目可能不会被删除。

detach(*items)

从树中取消所有指定的项目的链接。

项目及其所有后代仍然存在,并且可以在树中的另一点重新插入,但不会显示。

根项目可能不会分离。

exists(item)

如果指定的存在于树中,则返回True

focus(item=None)

如果指定,则将焦点项设置为否则,返回当前焦点项目,如果没有则返回''。

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

查询或修改指定的标题选项。

如果未给出kw,则返回标题选项值的dict。如果指定选项,则返回选项的值。否则,将选项设置为相应的值。

有效的选项/值为:

  • 文本:文本

    要在列标题中显示的文本。

  • image:imageName

    指定要显示在列标题右侧的图像。

  • anchor:anchor

    指定标题文本应如何对齐。标准Tk锚值之一。

  • 命令:回调

    按标题标签时调用的回调。

要配置树列标题,请使用column =“#0”调用此列。

identify(component, x, y)

xy给出的点下返回指定组件的描述,如果没有这样的t3>存在于该位置。

identify_row(y)

返回位置y处的项目的项目ID。

identify_column(x)

返回位置x的单元格的数据列标识符。

树列具有ID#0。

identify_region(x, y)

返回以下值之一:

地区含义
标题树标题区。
分隔器两列标题之间的空格。
树区。
细胞数据单元。

可用性:Tk 8.6。

identify_element(x, y)

返回位置xy的元素。

可用性:Tk 8.6。

index(item)

返回父项的子项列表中的整数索引。

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

创建一个新项目,并返回新创建项目的项目标识符。

父级是父项目的项目ID,或是用于创建新顶级项目的空字符串。index是一个整数,或值“end”,指定父项子项列表中要插入新项目的位置。如果index小于或等于零,则在开始插入新节点;如果index大于或等于当前的子数,则将其插入到末尾。如果指定iid,则将其用作项目标识符; iid必须不存在于树中。否则,生成新的唯一标识符。

有关可用点的列表,请参阅项目选项

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

查询或修改指定项目的选项

如果没有给出选项,则返回带有项目的选项/值的字典。如果指定选项,则返回该选项的值。否则,将选项设置为由kw给出的相应值。

move(item, parent, index)

项目移动到父项的子项列表中的索引

将项目移动到其后代之下是非法的。如果索引小于或等于零,则将移动到开头;如果大于或等于孩子的数量,它被移动到结束。如果已分离,则会重新连接。

next(item)

返回item的下一个同级的标识符,如果是其父级的最后一个子级,则返回''。

parent(item)

返回的父项的ID,如果位于层次结构的顶级,则返回“。

prev(item)

返回item的上一个同级的标识符,如果是其父级的第一个子级,则返回''。

reattach(item, parent, index)

Treeview.move()的别名。

see(item)

确保可见。

项目的所有祖先打开选项设置为True,并在必要时滚动窗口小部件,以便位于树的可见部分。

selection(selop=None, items=None)

如果未指定selop,则返回所选项目。否则,它将根据以下选择方法操作。

selection_set(items)

项目成为新选择。

selection_add(items)

项目添加到选择中。

selection_remove(items)

从选择中删除项目

selection_toggle(items)

切换项目中每个项目的选择状态。

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

使用一个参数,返回指定的列/值对的字典。使用两个参数,返回指定的当前值。使用三个参数,将给定中给定的值设置为指定的

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

将给定事件序列的回调绑定到标记标记名当事件传递到项目时,将调用每个项目的标签选项的回调。

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

查询或修改指定标记名的选项。

如果未给出kw,则返回标记名的选项设置的dict。如果指定选项,则返回指定标记名选项的值。否则,将选项设置为给定标记名的相应值。

tag_has(tagname, item=None)

如果指定,则根据指定的是否具有给定的标记名,返回1或0。否则,返回具有指定标记的所有项目的列表。

可用性:Tk 8.6

xview(*args)

查询或修改树视图的水平位置。

yview(*args)

查询或修改树视图的垂直位置。

25.2.10. Ttk Styling

ttk中的每个窗口小部件都被分配了一个样式,该样式指定了构成窗口小部件的元素集以及它们的排列方式,以及元素选项的动态和默认设置。默认情况下,样式名称与窗口小部件的类名称相同,但它可能会被窗口小部件的样式选项覆盖。如果你不知道窗口小部件的类名,使用方法Misc.winfo_class()(somewidget.winfo_class())。

也可以看看

Tcl'2004会议演讲
本文解释主题引擎如何工作
class tkinter.ttk.Style

这个类用于操作样式数据库。

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

查询或设置样式中指定选项的默认值。

kw中的每个键都是一个选项,每个值都是一个字符串,用于标识该选项的值。

例如,要将每个默认按钮更改为带有一些填充和不同背景颜色的平面按钮:

from tkinter import ttk
import tkinter

root = tkinter.Tk()

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

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

root.mainloop()
map(style, query_opt=None, **kw)

查询或设置样式中指定选项的动态值。

kw中的每个键都是一个选项,每个值都应该是一个列表或元组(通常)包含以元组,列表或其他首选项分组的statespec。statespec是一个或多个状态的复合,然后是一个值。

一个例子可以使它更容易理解:

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

注意,如果顺序改变为[('活动', '蓝色'), t> t2> ('pressed', 'red')]在前台选项中,例如,活动或按下状态。

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

返回样式选项指定的值。

如果指定state,则期望它是一个或多个状态的序列。如果设置了默认参数,则在没有找到选项的规范的情况下,将其用作回退值。

要检查Button在默认情况下使用的字体:

from tkinter import ttk

print(ttk.Style().lookup("TButton", "font"))
layout(style, layoutspec=None)

为给定的样式定义窗口小部件布局。如果省略layoutspec,则返回给定样式的布局规范。

layoutspec如果指定,应该是一个列表或一些其他序列类型(不包括字符串),其中每个项目应该是一个元组,第一个项目是布局名称,第二个项目应该有格式布局中描述的格式。

要了解格式,请参阅以下示例(它不打算做任何有用的):

from tkinter import ttk
import tkinter

root = tkinter.Tk()

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

mbtn = ttk.Menubutton(text='Text')
mbtn.pack()
root.mainloop()
element_create(elementname, etype, *args, **kw)

在当前主题中创建一个新的元素,给定的etype,它应该是“image”,“from”或“vsapi”。后者仅适用于Windows XP和Vista的Tk 8.6a,此处不再赘述。

如果使用“image”,则args应包含默认图像名称,后跟statespec /值对(这是imagespec),kw可能有以下选项:

  • 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.

如果“from”用作etype的值,则element_create()将克隆现有元素。args应包含一个themename,从中可以克隆该元素,也可以选择要从中进行克隆的元素。如果未指定要从中克隆的元素,则将使用空元素。kw

element_names()

返回在当前主题中定义的元素列表。

element_options(elementname)

返回elementname的选项列表。

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

创建新主题。

如果themename已存在,则是错误。如果指定parent,则新主题将从父主题继承样式,元素和布局。如果存在设置,则它们应具有与theme_settings()相同的语法。

theme_settings(themename, settings)

暂时将当前主题设置为themename,应用指定的设置,然后还原以前的主题。

设置中的每个键都是一个样式,每个值可以包含键'configure','map','layout'和'element create',并且它们应具有与方法Style.configure()Style.map()Style.layout()Style.element_create()

例如,让我们改变默认主题的Combobox:

from tkinter import ttk
import tkinter

root = tkinter.Tk()

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

combo = ttk.Combobox().pack()

root.mainloop()
theme_names()

返回所有已知主题的列表。

theme_use(themename=None)

如果未给出themename,则返回正在使用的主题。Otherwise, sets the current theme to themename, refreshes all widgets and emits a <> event.

25.2.10.1. Layouts

如果不需要任何选项,布局可以只是None,或者指定如何排列元素的选项的dict。布局机制使用封装几何管理器的简化版本:给定一个初始空腔,每个元素都分配了一个宗地。有效的选项/值包括:

  • 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 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.