tkinter.ttk — Tk 主题小部件

源代码: Lib/tkinter/ttk.py


tkinter.ttk 模块提供了对 Tk 8.5 中引入的 Tk 主题小部件集的访问。它提供了额外的优势,包括 X11 下的抗锯齿字体渲染和窗口透明度(在 X11 上需要合成窗口管理器)。

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

另请参阅

Tk 小部件样式支持

介绍 Tk 主题支持的文档

使用 Ttk

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

from tkinter import ttk

要覆盖基本的 Tk 小部件,导入应在 Tk 导入之后

from tkinter import *
from tkinter.ttk import *

该代码会导致几个 tkinter.ttk 小部件(ButtonCheckbuttonEntryFrameLabelLabelFrameMenubuttonPanedWindowRadiobuttonScaleScrollbar)自动替换 Tk 小部件。

这具有使用新小部件的直接好处,可以在不同平台上提供更好的外观和感觉;但是,替换小部件并不完全兼容。主要区别在于,与小部件样式相关的“fg”、“bg”等小部件选项不再出现在 Ttk 小部件中。相反,请使用 ttk.Style 类来获得更好的样式效果。

另请参阅

转换现有应用程序以使用 Tile 小部件

一篇关于在将应用程序迁移到使用新小部件时通常遇到的差异的专著(使用 Tcl 术语)。

Ttk 小部件

Ttk 附带 18 个小部件,其中 12 个已经存在于 tkinter 中:ButtonCheckbuttonEntryFrameLabelLabelFrameMenubuttonPanedWindowRadiobuttonScaleScrollbarSpinbox。其他六个是新的: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 类文档。

小部件

ttk.Widget 定义了 Tk 主题小部件支持的标准选项和方法,并且不应直接实例化。

标准选项

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

选项

描述

class

指定窗口类。该类用于在选项数据库中查询窗口的其他选项,以确定窗口的默认绑定标签,并选择小部件的默认布局和样式。此选项为只读选项,并且只能在创建窗口时指定。

cursor

指定用于小部件的鼠标光标。如果设置为字符串(默认值),则从父小部件继承光标。

takefocus

确定窗口在键盘遍历期间是否接受焦点。返回 0、1 或空字符串。如果返回 0,则表示在键盘遍历期间应完全跳过该窗口。如果返回 1,则表示只要窗口可见,它就应该接收输入焦点。空字符串表示遍历脚本决定是否将焦点放在窗口上。

style

可用于指定自定义小部件样式。

可滚动小部件选项

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

选项

描述

xscrollcommand

用于与水平滚动条通信。

当小部件窗口中的视图发生变化时,小部件将根据 scrollcommand 生成一个 Tcl 命令。

通常,此选项包含某个滚动条的 Scrollbar.set() 方法。这将导致每次窗口中的视图发生变化时更新滚动条。

yscrollcommand

用于与垂直滚动条通信。有关更多信息,请参见上文。

标签选项

标签、按钮和其他类似按钮的部件支持以下选项。

选项

描述

text

指定要显示在部件内的文本字符串。

textvariable

指定一个名称,其值将用于替换 text 选项资源。

underline

如果设置,则指定要在文本字符串中加下划线的字符的索引(从 0 开始)。下划线字符用于助记符激活。

image

指定要显示的图像。这是一个包含 1 个或多个元素的列表。第一个元素是默认图像名称。列表的其余部分是由 Style.map() 定义的状态说明/值对的序列,用于指定当部件处于特定状态或状态组合时要使用的不同图像。列表中的所有图像应具有相同的大小。

compound

指定在同时存在 text 和 images 选项的情况下,如何显示图像相对于文本的位置。有效值为

  • text:仅显示文本

  • image:仅显示图像

  • top、bottom、left、right:分别显示图像在文本上方、下方、左侧或右侧。

  • none:默认值。如果存在图像则显示图像,否则显示文本。

width

如果大于零,则指定为文本标签分配多少空间(以字符宽度为单位);如果小于零,则指定最小宽度。如果为零或未指定,则使用文本标签的自然宽度。

兼容性选项

选项

描述

state

可以设置为“normal”或“disabled”来控制“disabled”状态位。这是一个只写选项:设置它会更改部件状态,但 Widget.state() 方法不会影响此选项。

部件状态

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

标志

描述

active

鼠标光标位于部件上方,按下鼠标按钮将导致执行某些操作

disabled

部件在程序控制下被禁用

focus

部件具有键盘焦点

pressed

部件正在被按下

selected

对于复选按钮和单选按钮等,表示“开”、“真”或“当前”

background

Windows 和 Mac 有“活动”或前台窗口的概念。*background* 状态针对背景窗口中的部件设置,并针对前台窗口中的部件清除

readonly

部件应不允许用户修改

alternate

特定于部件的备用显示格式

invalid

部件的值无效

状态说明是一系列状态名称,可以选择在其前面加上感叹号,表示该位已关闭。

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* 匹配时返回 True,否则返回 False。如果指定了回调,则在部件状态与 *statespec* 匹配时使用 args 调用它。

state(statespec=None)

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

*statespec* 通常是列表或元组。

组合框

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

除了从 Widget 继承的方法:Widget.cget()Widget.configure()Widget.identify()Widget.instate()Widget.state(),以及从 Entry 继承的以下方法:Entry.bbox()Entry.delete()Entry.icursor()Entry.index()Entry.insert()Entry.selection()Entry.xview(),它还有一些其他方法,在 ttk.Combobox 中进行了描述。

选项

此部件接受以下特定选项

选项

描述

exportselection

布尔值。如果设置,则部件选择将链接到窗口管理器选择(例如,可以通过调用 Misc.selection_get 返回)。

justify

指定文本在部件内的对齐方式。可以是“left”、“center”或“right”之一。

height

指定下拉列表框的高度,以行为单位。

postcommand

在显示值之前立即调用的脚本(可能已使用 Misc.register 注册)。它可以指定要显示的值。

state

可以是“normal”、“readonly”或“disabled”之一。在“readonly”状态下,不能直接编辑该值,用户只能从下拉列表中选择值。在“normal”状态下,可以直接编辑文本字段。在“disabled”状态下,无法进行任何交互。

textvariable

指定一个名称,其值与小部件值相关联。每当与该名称关联的值发生更改时,小部件值也会更新,反之亦然。请参阅 tkinter.StringVar

values

指定要在下拉列表框中显示的值列表。

width

指定一个整数值,该值指示输入窗口的所需宽度,以小部件字体的平均字符大小表示。

虚拟事件

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

ttk.Combobox

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

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

get()

返回组合框的当前值。

set(value)

将组合框的值设置为 value

Spinbox(微调框)

ttk.Spinbox 小部件是一个增强了增量和减量箭头的 ttk.Entry。它可以用于数字或字符串值列表。此小部件是 Entry 的子类。

除了从 Widget 继承的方法:Widget.cget()Widget.configure()Widget.identify()Widget.instate()Widget.state() 以及从 Entry 继承的以下方法:Entry.bbox()Entry.delete()Entry.icursor()Entry.index()Entry.insert()Entry.xview() 之外,它还有一些其他方法,在 ttk.Spinbox 中有描述。

选项

此部件接受以下特定选项

选项

描述

from

浮点值。如果设置,这是减量按钮将减量到的最小值。当用作参数时,必须拼写为 from_,因为 from 是 Python 关键字。

to

浮点值。如果设置,这是增量按钮将增量到的最大值。

increment

浮点值。指定增量/减量按钮更改值的幅度。默认为 1.0。

values

字符串或浮点值的序列。如果指定,增量/减量按钮将在该序列中的项目之间循环,而不是增加或减少数字。

wrap

布尔值。如果为 True,则增量和减量按钮将分别从 to 值循环到 from 值,或从 from 值循环到 to 值。

format

字符串值。这指定了由增量/减量按钮设置的数字的格式。它必须采用“%W.Pf”的形式,其中 W 是值的填充宽度,P 是精度,“%”和“f”是文字。

command

Python 可调用对象。每当按下增量或减量按钮时,都将调用它,不带任何参数。

虚拟事件

当用户按下 <Up> 时,微调框小部件会生成一个 <<Increment>> 虚拟事件;当用户按下 <Down> 时,会生成一个 <<Decrement>> 虚拟事件。

ttk.Spinbox

class tkinter.ttk.Spinbox
get()

返回微调框的当前值。

set(value)

将微调框的值设置为 value

Notebook(笔记本)

Ttk Notebook 小部件管理窗口集合,并一次显示一个窗口。每个子窗口都与一个选项卡相关联,用户可以选择该选项卡来更改当前显示的窗口。

选项

此部件接受以下特定选项

选项

描述

height

如果存在且大于零,则指定窗格区域的所需高度(不包括内部填充或选项卡)。否则,将使用所有窗格的最大高度。

padding(填充)

指定在笔记本外部添加的额外空间量。填充是一个包含最多四个长度规范的列表:左、上、右、下。如果指定的元素少于四个,则底部默认为顶部,右侧默认为左侧,顶部默认为左侧。

width

如果存在且大于零,则指定窗格区域的所需宽度(不包括内部填充)。否则,将使用所有窗格的最大宽度。

选项卡选项

还有一些针对选项卡的特定选项

选项

描述

state

“normal”(正常)、“disabled”(禁用)或“hidden”(隐藏)。如果为“disabled”,则无法选择该选项卡。如果为“hidden”,则不显示该选项卡。

sticky(粘贴)

指定子窗口在窗格区域内的定位方式。值是一个字符串,包含零个或多个字符“n”、“s”、“e”或“w”。每个字母表示子窗口将粘贴到的侧面(北、南、东或西),根据 grid() 几何管理器。

padding(填充)

指定在笔记本和此窗格之间添加的额外空间量。语法与此小部件使用的选项 padding 相同。

text

指定要显示在选项卡中的文本。

image

指定要显示在选项卡中的图像。请参阅 Widget 中描述的选项 image。

compound

指定在同时存在选项 text 和 image 的情况下,如何显示图像相对于文本的位置。有关合法值,请参阅标签选项

underline

指定要在文本字符串中加下划线的字符的索引(从 0 开始)。如果调用了 Notebook.enable_traversal(),则加下划线的字符用于助记符激活。

选项卡标识符

ttk.Notebook 的几种方法中出现的 tab_id 可以采用以下任何形式

  • 零到选项卡数量之间的整数

  • 子窗口的名称

  • 形式为“@x,y”的位置规范,用于标识选项卡

  • 文字字符串“current”,用于标识当前选定的选项卡

  • 文字字符串“end”,返回选项卡的数量(仅对 Notebook.index() 有效)

虚拟事件

此小部件在选择新选项卡后会生成一个 <<NotebookTabChanged>> 虚拟事件。

ttk.Notebook

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

向笔记本添加一个新选项卡。

如果窗口当前由笔记本管理但处于隐藏状态,则会将其恢复到之前的位置。

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

forget(tab_id)

删除由 *tab_id* 指定的选项卡,取消映射和管理关联的窗口。

hide(tab_id)

隐藏由 *tab_id* 指定的选项卡。

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

identify(x, y)

返回位置 *x*、*y* 处的选项卡元素的名称,如果没有,则返回空字符串。

index(tab_id)

返回由 *tab_id* 指定的选项卡的数字索引,如果 *tab_id* 是字符串“end”,则返回选项卡总数。

insert(pos, child, **kw)

在指定位置插入窗格。

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

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

select(tab_id=None)

选择指定的 *tab_id*。

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

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

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

如果没有给出 *kw*,则返回选项卡选项值的字典。如果指定了 *option*,则返回该 *option* 的值。否则,将选项设置为相应的值。

tabs()

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

enable_traversal()

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

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

  • Control-Tab:选择当前选定选项卡之后的选项卡。

  • Shift-Control-Tab:选择当前选定选项卡之前的选项卡。

  • Alt-K:其中 *K* 是任何选项卡的助记符(带下划线)字符,将选择该选项卡。

可以为单个顶级窗口中的多个笔记本启用遍历,包括嵌套笔记本。但是,只有当所有窗格都将它们所在的笔记本作为主窗口时,笔记本遍历才能正常工作。

进度条

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

选项

此部件接受以下特定选项

选项

描述

orient

“horizontal”或“vertical”之一。指定进度条的方向。

length

指定进度条长轴的长度(如果是水平方向,则为宽度;如果是垂直方向,则为高度)。

mode

“determinate”或“indeterminate”之一。

maximum

指定最大值的数字。默认为 100。

value

进度条的当前值。在“determinate”模式下,这表示已完成的工作量。在“indeterminate”模式下,它被解释为模 *maximum*;也就是说,当进度条的值增加 *maximum* 时,它完成一个“循环”。

variable

链接到选项值的名称。如果指定,则只要修改后者,进度条的值就会自动设置为该名称的值。

phase

只读选项。每当其值大于 0 且在确定模式下小于最大值时,小部件都会定期增加此选项的值。当前主题可以使用此选项来提供额外的动画效果。

ttk.Progressbar

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

开始自动递增模式:安排一个循环计时器事件,该事件每 *interval* 毫秒调用一次 Progressbar.step()。如果省略,则 *interval* 默认为 50 毫秒。

step(amount=None)

将进度条的值增加 *amount*。

如果省略,则 *amount* 默认为 1.0。

stop()

停止自动递增模式:取消为此进度条由 Progressbar.start() 启动的任何循环计时器事件。

分隔符

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

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

选项

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

选项

描述

orient

“horizontal”或“vertical”之一。指定分隔符的方向。

尺寸调整柄

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

除了从 ttk.Widget 继承的选项和方法之外,此小部件没有特定的选项或方法。

平台特定说明

  • 在 macOS 上,顶级窗口默认自动包含一个内置的大小调整手柄。添加 Sizegrip 是无害的,因为内置手柄只会遮盖该小部件。

错误

  • 如果包含顶级窗口的位置是相对于屏幕的右侧或底部指定的(例如…),则 Sizegrip 小部件将不会调整窗口大小。

  • 此小部件仅支持“东南”方向的大小调整。

树状视图

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

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

每个项目都由唯一的名称标识。如果调用者未提供项目 ID,则小部件将生成项目 ID。有一个名为 {} 的特殊根项目。根项目本身不显示;其子级显示在层次结构的顶层。

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

Treeview 小部件支持水平和垂直滚动,具体取决于 可滚动小部件选项 中描述的选项以及 Treeview.xview()Treeview.yview() 方法。

选项

此部件接受以下特定选项

选项

描述

columns

列标识符列表,指定列数及其名称。

displaycolumns

列标识符列表(符号或整数索引),指定显示哪些数据列及其显示顺序,或字符串“#all”。

height

指定应可见的行数。注意:请求的宽度由列宽之和确定。

padding(填充)

指定小部件的内部填充。填充是最多四个长度规范的列表。

selectmode

控制内置类绑定如何管理选择。选项包括“extended”、“browse”或“none”。如果设置为“extended”(默认值),则可以选择多个项目。如果设置为“browse”,则一次只能选择一个项目。如果设置为“none”,则不会更改选择。

请注意,应用程序代码和标签绑定可以根据需要设置选择,而不管此选项的值如何。

show

一个包含零个或多个以下值的列表,指定要显示树的哪些元素。

  • tree:在第 0 列中显示树标签。

  • headings:显示标题行。

默认值为“tree headings”,即显示所有元素。

**注意**:即使未指定 show=”tree”,第 0 列也始终指的是树列。

项目选项

可以在 insert 和 item 小部件命令中为项目指定以下项目选项。

选项

描述

text

要为项目显示的文本标签。

image

一个 Tk 图像,显示在标签的左侧。

values

与项目关联的值列表。

每个项目应具有与小部件选项 columns 相同数量的值。如果值少于列,则剩余的值假定为空。如果值多于列,则忽略多余的值。

open

True/False 值,指示是应显示还是隐藏项目的子级。

tags

与此项目关联的标签列表。

标签选项

可以在标签上指定以下选项

选项

描述

foreground

指定文本前景色。

background

指定单元格或项目背景色。

font

指定绘制文本时使用的字体。

image

指定项目图像,以防项目的 image 选项为空。

列标识符

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

  • columns 选项列表中的符号名称。

  • 整数 n,指定第 n 个数据列。

  • 格式为 #n 的字符串,其中 n 是一个整数,指定第 n 个显示列。

注意

  • 项目的选项值可能以与其存储顺序不同的顺序显示。

  • 即使未指定 show=”tree”,第 0 列也始终指的是树列。

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

虚拟事件

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

事件

描述

<<TreeviewSelect>>

每当选择更改时生成。

<<TreeviewOpen>>

在将焦点项目设置为 open=True 之前生成。

<<TreeviewClose>>

在将焦点项目设置为 open=False 之后生成。

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

ttk.Treeview

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

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

如果指定了 *column*,则返回该单元格的边界框。如果 *item* 不可见(即,如果它是关闭项目的子级或已滚动到屏幕外),则返回空字符串。

get_children(item=None)

返回属于 *item* 的子级列表。

如果未指定 *item*,则返回根子级。

set_children(item, *newchildren)

将 *item* 的子级替换为 *newchildren*。

如果 *newchildren* 中不存在 *item* 中的子项,则将这些子项从树中分离。*newchildren* 中的任何项都不能是 *item* 的祖先。请注意,如果未指定 *newchildren*,则会导致分离 *item* 的所有子项。

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

查询或修改指定 *column* 的选项。

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

有效的选项/值是

id

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

anchor:标准 Tk anchor 值之一。

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

minwidth:宽度

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

stretchTrue/False

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

width:宽度

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

要配置树列,请使用 column = “#0” 调用此方法

delete(*items)

删除所有指定的 *items* 及其所有后代。

根项可能无法删除。

detach(*items)

取消所有指定的 *items* 与树的链接。

这些项及其所有后代仍然存在,并且可以重新插入到树中的另一个位置,但不会显示。

根项可能无法分离。

exists(item)

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

focus(item=None)

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

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

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

如果未给出 *kw*,则返回标题选项值的字典。如果指定了 *option*,则返回该 *option* 的值。否则,将选项设置为相应的值。

有效的选项/值是

text:文本

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

image:imageName

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

anchor:anchor

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

command:回调

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

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

identify(component, x, y)

返回由 *x* 和 *y* 给定点下的指定 *component* 的描述;如果该位置不存在此类 *component*,则返回空字符串。

identify_row(y)

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

identify_column(x)

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

树列的 ID 为 #0。

identify_region(x, y)

返回以下之一

区域

含义

heading

树标题区域。

separator

两列标题之间的空格。

tree

树区域。

cell

数据单元格。

可用性:Tk 8.6。

identify_element(x, y)

返回位置 *x*、*y* 处的元素。

可用性:Tk 8.6。

index(item)

返回 *item* 在其父项的子项列表中的整数索引。

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

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

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

有关可用选项的列表,请参见项选项

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

查询或修改指定 *item* 的选项。

如果未给出任何选项,则返回包含该项的选项/值的字典。如果指定了 *option*,则返回该选项的值。否则,将选项设置为 *kw* 给出的相应值。

move(item, parent, index)

item 移动到 parent 的子项列表中的 index 位置。

将项目移动到其后代之下是非法的。如果 index 小于或等于零,则将 item 移动到开头;如果大于或等于子项数,则将其移动到末尾。如果 item 已分离,则将其重新附加。

next(item)

返回 item 的下一个兄弟节点的标识符,如果 item 是其父节点的最后一个子节点,则返回 ''。

parent(item)

返回 item 的父节点的 ID,如果 item 位于层次结构的顶层,则返回 ''。

prev(item)

返回 item 的上一个兄弟节点的标识符,如果 item 是其父节点的第一个子节点,则返回 ''。

reattach(item, parent, index)

Treeview.move() 的别名。

see(item)

确保 item 可见。

item 的所有祖先的 open 选项设置为 True,并在必要时滚动小部件,以便 item 位于树的可见部分内。

selection()

返回所选项的元组。

在 3.8 版更改: selection() 不再接受参数。要更改选择状态,请使用以下选择方法。

selection_set(*items)

items 变为新的选择。

在 3.6 版更改: items 可以作为单独的参数传递,而不仅仅是作为单个元组传递。

selection_add(*items)

items 添加到选择中。

在 3.6 版更改: items 可以作为单独的参数传递,而不仅仅是作为单个元组传递。

selection_remove(*items)

从选择中删除 items

在 3.6 版更改: items 可以作为单独的参数传递,而不仅仅是作为单个元组传递。

selection_toggle(*items)

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

在 3.6 版更改: items 可以作为单独的参数传递,而不仅仅是作为单个元组传递。

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

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

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

将给定事件 sequence 的回调绑定到标签 tagname。当事件传递到项目时,将调用每个项目 tags 选项的回调。

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

查询或修改指定 tagname 的选项。

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

tag_has(tagname, item=None)

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

可用性:Tk 8.6

xview(*args)

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

yview(*args)

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

Ttk 样式

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

另请参阅

Tcl'2004 会议演示文稿

本文档解释了主题引擎的工作原理

class tkinter.ttk.Style

此类用于操作样式数据库。

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

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

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)

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

kw中的每个键都是一个选项,每个值应该是一个列表或元组(通常),其中包含按元组、列表或其他一些偏好分组的状态规范。状态规范是一个或多个状态和一个值的组合。

一个例子可能会让你更容易理解

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

请注意,选项的(状态,值)序列的顺序很重要,例如,如果在前景选项中将顺序更改为[('active', 'blue'), ('pressed', 'red')],则当小部件处于活动或按下状态时,结果将是蓝色前景。

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

返回style中为option指定的值。

如果指定了state,则它应该是一个或多个状态的序列。如果设置了default参数,则在找不到选项规范的情况下,它将用作回退值。

要检查按钮默认使用什么字体

from tkinter import ttk

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

定义给定style的小部件布局。如果省略了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”。

如果使用“image”,则args应包含默认图像名称,后跟状态规范/值对(这是图像规范),kw可以具有以下选项

border=padding

padding是最多四个整数的列表,分别指定左、上、右和下边框。

height=height

指定元素的最小高度。如果小于零,则使用基本图像的高度作为默认值。

padding=padding

指定元素的内部填充。如果未指定,则默认为border的值。

sticky=spec

指定图像在最终包裹中的放置方式。spec包含零个或多个字符“n”、“s”、“w”或“e”。

width=width

指定元素的最小宽度。如果小于零,则使用基本图像的宽度作为默认值。

示例

img1 = tkinter.PhotoImage(master=root, file='button.png')
img1 = tkinter.PhotoImage(master=root, file='button-pressed.png')
img1 = tkinter.PhotoImage(master=root, file='button-active.png')
style = ttk.Style(root)
style.element_create('Button.button', 'image',
                     img1, ('pressed', img2), ('active', img3),
                     border=(2, 4), sticky='we')

如果使用“from”作为etype的值,则element_create()将克隆现有元素。args应包含一个主题名称,元素将从该主题名称克隆,还可以选择要克隆的元素。如果未指定要克隆的元素,则将使用空元素。kw被丢弃。

示例

style = ttk.Style(root)
style.element_create('plain.background', 'from', 'default')
element_names()

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

element_options(elementname)

返回elementname的选项列表。

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

创建一个新主题。

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

theme_settings(themename, settings)

临时将当前主题设置为themename,应用指定的settings,然后恢复之前的主题。

settings中的每个键都是一种样式,每个值都可以包含键“configure”、“map”、“layout”和“element create”,并且它们的格式应与方法Style.configure()Style.map()Style.layout()Style.element_create()中指定的格式相同。

例如,让我们稍微更改一下默认主题的组合框

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,则返回正在使用的主题。否则,将当前主题设置为themename,刷新所有小部件并发出<<ThemeChanged>>事件。

布局

布局可以是 None,如果它不带任何选项,或者是一个指定如何排列元素的选项字典。布局机制使用 pack 几何管理器的一个简化版本:给定一个初始空腔,每个元素都被分配了一个区域。

有效的选项/值是

side:哪一侧

指定将元素放置在空腔的哪一侧;可以是顶部、右侧、底部或左侧。如果省略,则元素将占据整个空腔。

sticky:nswe

指定元素在其分配的区域内的放置位置。

unit:0 或 1

如果设置为 1,则会导致元素及其所有后代在 Widget.identify() 等方法中被视为单个元素。它用于滚动条滑块等带有手柄的元素。

children:[子布局…]

指定要放置在元素内的元素列表。每个元素都是一个元组(或其他序列类型),其中第一项是布局名称,另一项是 布局