25.2. tkinter.ttk
- Tk主题窗口小部件¶
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
. 其他六个是新的:Combobox
,Notebook
,Progressbar
,Separator
,Sizegrip
和Treeview
。它们都是Widget
的子类。
使用Ttk小部件为应用程序提供了改进的外观和感觉。如上所述,在样式被如何编码方面存在差异。
Tk代码:
l1 = tkinter.Label(text="Test", fg="black", bg="white")
l2 = tkinter.Label(text="Test", fg="black", bg="white")
Ttk代码:
style = ttk.Style()
style.configure("BW.TLabel", foreground="black", background="white")
l1 = ttk.Label(text="Test", style="BW.TLabel")
l2 = ttk.Label(text="Test", style="BW.TLabel")
有关TtkStyling的详细信息,请参阅Style
类文档。
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处元素的名称,如果该点不在任何元素内,则返回空字符串。
x和y是相对于窗口小部件的像素坐标。
-
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.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
¶ -
forget
(tab_id)¶ 删除tab_id指定的标签,取消映射并取消管理关联的窗口。
-
identify
(x, y)¶ 返回位置x,y处的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)¶ 在x和y给出的点下返回指定组件的描述,如果没有这样的t3>存在于该位置。
-
identify_row
(y)¶ 返回位置y处的项目的项目ID。
-
identify_column
(x)¶ 返回位置x的单元格的数据列标识符。
树列具有ID#0。
-
identify_region
(x, y)¶ 返回以下值之一:
地区 含义 标题 树标题区。 分隔器 两列标题之间的空格。 树 树区。 细胞 数据单元。 可用性:Tk 8.6。
-
identify_element
(x, y)¶ 返回位置x,y的元素。
可用性: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.