tkinter.ttk — Tk 主题窗口小部件

源代码: Lib/tkinter/ttk.py


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

tkinter.ttk 的基本思想是在最大程度上将实现小部件行为的代码与实现其外观的代码分离。

另请参阅

Tk 小部件样式支持

一份介绍 Tk 主题支持的文档

使用 Ttk

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

from tkinter import ttk

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

from tkinter import *
from tkinter.ttk import *

该代码会导致多个 tkinter.ttk 小部件(Button, Checkbutton, Entry, Frame, Label, LabelFrame, Menubutton, PanedWindow, Radiobutton, ScaleScrollbar)自动替换 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

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

compound

指定在同时存在文本和图像选项的情况下,如何相对于文本显示图像。有效值包括:

  • text: 仅显示文本

  • image: 仅显示图像

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

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

width

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

兼容性选项

选项

描述

state

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

小部件状态

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

标志

描述

active

鼠标光标位于小部件上方,并且按下鼠标按钮将导致某些操作发生

disabled

小部件在程序控制下被禁用

focus

小部件拥有键盘焦点

pressed

小部件正在被按下

selected

对于复选按钮和单选按钮等,为“On”、“true”或“current”

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 处的元素的名称,如果该点不位于任何元素内,则返回空字符串。

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

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

测试小部件的状态。如果未指定回调,则当小部件状态与 statespec 匹配时返回 True,否则返回 False。如果指定了回调,则当小部件状态与 statespec 匹配时,将使用 args 调用该回调。

state(statespec=None)

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

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

Combobox

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

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

text

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

image

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

compound

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

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 是无害的,因为内置手柄只会遮盖该小部件。

Bug

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

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

树状视图

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

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

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

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

根据 可滚动的小部件选项 中描述的选项以及方法 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

与项目关联的值列表。

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

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

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

get_children(item=None)

返回属于项目的子项列表。

如果未指定项目,则返回根子项。

set_children(item, *newchildren)

newchildren 替换项目的子项。

项目中存在但 newchildren 中不存在的子项将从树中分离。newchildren 中的任何项都不能是项目的祖先。请注意,不指定 newchildren 会导致分离项目的子项。

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

查询或修改指定的选项。

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

有效的选项/值是

id

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

anchor:标准 Tk 定位值之一。

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

minwidth:宽度

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

stretchTrue/False

指定在调整部件大小后是否应调整列的宽度。

width:宽度

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

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

delete(*items)

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

不能删除根项目。

detach(*items)

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

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

不能分离根项目。

exists(item)

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

focus(item=None)

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

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

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

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

有效的选项/值是

text:文本

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

image:imageName

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

anchor:定位

指定标题文本的对齐方式。标准 Tk 定位值之一。

command:回调

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

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

identify(component, x, y)

返回由 xy 给定的点下的指定组件的描述,如果该位置不存在此类组件,则返回空字符串。

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)

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

如果没有给出选项,则返回包含项目选项/值的字典。如果指定了 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。当事件传递给某个项时,将调用该项的每个标签选项的回调。

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 中的每个小部件都分配有一个样式,该样式指定构成小部件的一组元素以及它们如何排列,以及元素选项的动态和默认设置。默认情况下,样式名称与小部件的类名称相同,但可以通过小部件的样式选项覆盖。如果你不知道小部件的类名,请使用方法 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()

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

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

返回在 style 中为 option 指定的值。

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

要检查 Button 默认使用的字体

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” 或 “vsapi”。后者仅在 Windows 上的 Tk 8.6 中可用。

如果使用 “image”,args 应包含默认的图像名称,后跟状态规范/值对(即 imagespec),并且 kw 可能具有以下选项:

border=padding

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

height=height

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

padding=padding

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

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

如果将 “vsapi” 用作 etype 的值,element_create() 将在当前主题中创建一个新元素,其视觉外观是使用 Microsoft Visual Styles API 绘制的,该 API 负责 Windows XP 和 Vista 上的主题样式。args 应包含 Microsoft 文档中给出的 Visual Styles 类和部分,后跟可选的 ttk 状态元组和相应的 Visual Styles API 状态值序列。kw 可能具有以下选项:

padding=padding

指定元素的内部填充。padding 是一个最多包含四个整数的列表,分别指定左、上、右和下填充量。如果指定的元素少于四个,则底部默认为顶部,右侧默认为左侧,顶部默认为左侧。换句话说,包含三个数字的列表指定左侧、垂直和右侧填充;包含两个数字的列表指定水平和垂直填充;单个数字指定小部件周围的相同填充。此选项不能与任何其他选项混合使用。

margins=padding

指定元素的外部填充。padding 是一个最多包含四个整数的列表,分别指定左、上、右和下填充量。此选项不能与任何其他选项混合使用。

width=width

指定元素的宽度。如果设置此选项,则不会查询 Visual Styles API 以获取建议的大小或部分。如果设置此选项,则还应设置 heightwidthheight 选项不能与 paddingmargins 选项混合使用。

height=height

指定元素的高度。请参阅 width 的注释。

示例

style = ttk.Style(root)
style.element_create('pin', 'vsapi', 'EXPLORERBAR', 3, [
                     ('pressed', '!selected', 3),
                     ('active', '!selected', 2),
                     ('pressed', 'selected', 6),
                     ('active', 'selected', 5),
                     ('selected', 4),
                     ('', 1)])
style.layout('Explorer.Pin',
             [('Explorer.Pin.pin', {'sticky': 'news'})])
pin = ttk.Checkbutton(style='Explorer.Pin')
pin.pack(expand=True, fill='both')

3.13 版本更改: 添加了对 “vsapi” 元素工厂的支持。

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: whichside

指定将元素放置在空腔的哪一侧;top、right、bottom 或 left 中的一个。如果省略,则元素将占据整个空腔。

sticky: nswe

指定元素在其分配的包裹内的放置位置。

unit: 0 或 1

如果设置为 1,则为了 Widget.identify() 等方法的目的,将元素及其所有后代视为单个元素。它用于诸如带有抓手的滚动条滑块之类的东西。

children: [sublayout… ]

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