Skip to main content

25.2. tkinter.ttk — Tk主题小部件

源代码: Lib/tkinter/ttk.py


tkinter.ttk 模块提供对Tk 8.5中介绍的Tk主题小部件集的访问。如果Python没有针对Tk 8.5编译,如果已经安装了 Tile,则仍然可以访问此模块。使用Tk 8.5的前一种方法提供了额外的好处,包括在X11下的反锯齿字体渲染和窗口透明度(需要X11上的合成窗口管理器)。

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

参见

Tk微件样式支持

介绍Tk的支持的文档

25.2.1. 使用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术语)。

25.2.2. Ttk小部件

Ttk带有17个小部件,其中已经存在于tkinter中的11个小部件:ButtonCheckbuttonEntryFrameLabelLabelFrameMenubuttonPanedWindowRadiobuttonScaleScrollbar。其他六个是新的: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. 小部件

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

25.2.3.1. 标准选项

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

选项

描述

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

光标

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

takefocus

确定窗口是否在键盘遍历期间接受焦点。 0,1或返回一个空字符串。如果返回0,则意味着在键盘遍历期间应该完全跳过窗口。如果为1,则意味着窗口应该接收输入焦点,只要它是可见的。空字符串意味着遍历脚本决定是否关注窗口。

样式

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

25.2.3.2. 可滚动小部件选项

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

选项

描述

xscrollcommand

用于与水平滚动条通信。

当窗口小部件窗口中的视图更改时,窗口小部件将基于滚动命令生成Tcl命令。

通常这个选项包括一些滚动条的方法 Scrollbar.set()。这将导致每当窗口中的视图更改时更新滚动条。

yscrollcommand

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

25.2.3.3. 标签选项

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

选项

描述

文本

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

文本变量

指定其值将用于替换文本选项资源的名称。

强调

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

图片

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

复合

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

  • text:仅显示文本

  • image:仅显示图像

  • 顶部,底部,左,右:分别在文本的上方,下方,左侧或右侧显示图像。

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

宽度

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

25.2.3.4. 兼容性选项

选项

描述

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

25.2.3.5. 小部件状态

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

描述

活性

鼠标光标在窗口小部件上,按下鼠标按钮将导致一些操作发生

禁用

小部件在程序控制下禁用

焦点

小部件有键盘焦点

按下

小部件被按下

选择

“检查按钮”和“单选按钮”等“开”,“真”或“当前”

背景

Windows和Mac有一个“活动”或前景窗口的概念。 background 状态设置为后台窗口中的窗口小部件,并为前台窗口中的窗口小部件清除

只读

小部件不应允许用户修改

备用

特定于窗口小部件的替代显示格式

无效

窗口小部件的值无效

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

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

state(statespec=None)

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

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

25.2.4. 组合框

ttk.Combobox 窗口小部件将文本字段与值的弹出式列表组合在一起。这个小部件是 Entry 的子类。

除了继承自 Widget 的方法:Widget.cget()Widget.configure()Widget.identify()Widget.instate()Widget.state(),以及以下遗传自 EntryEntry.bbox()Entry.delete()Entry.icursor()Entry.index()Entry.insert()Entry.selection()Entry.xview(),其具有一些其它方法,如 ttk.Combobox 所述。

25.2.4.1. 选项

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

选项

描述

导出选择

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

对齐

指定文本在窗口小部件中的对齐方式。 “左”,“中”或“右”之一。

高度

指定弹出式列表框的高度,以行为单位。

postcommand

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

“正常”,“只读”或“禁用”之一。在“只读”状态下,不能直接编辑该值,用户只能从下拉列表中选择值。在“正常”状态下,文本字段是可直接编辑的。在“禁用”状态下,不能进行交互。

文本变量

指定其值链接到窗口小部件值的名称。每当与该名称关联的值更改时,将更新窗口小部件值,反之亦然。见 tkinter.StringVar

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

宽度

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

25.2.4.2. 虚拟事件

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

25.2.4.3. ttk.Combobox

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

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

get()

返回组合框的当前值。

set(value)

将组合框的值设置为 value

25.2.5. 笔记本

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

25.2.5.1. 选项

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

选项

描述

高度

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

填充

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

宽度

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

25.2.5.2. 标签选项

标签也有特定的选项:

选项

描述

“正常”,“禁用”或“隐藏”。如果“禁用”,则不能选择选项卡。如果“隐藏”,则不显示选项卡。

指定子窗口在窗格区域中的位置。值是包含零个或多个字符“n”,“s”,“e”或“w”的字符串。每个字母指的是子窗口将依照 grid() 几何管理器粘贴的一侧(北,南,东或西)。

填充

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

文本

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

图片

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

复合

指定如何在存在选项文本和图像的情况下相对于文本显示图像。请参阅 Label Options 的法律价值观。

强调

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

25.2.5.3. 选项卡标识符

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

  • 零与标签数之间的整数

  • 子窗口的名称

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

  • 字符串“current”,标识当前选择的选项卡

  • 文本字符串“end”,它返回制表符的数量(仅对 Notebook.index() 有效)

25.2.5.4. 虚拟事件

选择新选项卡后,此窗口小部件将生成 << NotebookTabChanged >> 虚拟事件。

25.2.5.5. ttk.Notebook

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

将新标签添加到笔记本。

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

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

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”,整数索引或受管孩子的名称。如果 child 已经由笔记本电脑管理,请将其移动到指定位置。

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

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 是任何选项卡的助记符(下划线)字符,将选择该选项卡。

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

25.2.6. 进度条

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

25.2.6.1. 选项

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

选项

描述

东方

“水平”或“垂直”之一。指定进度条的方向。

长度

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

模式

“确定”或“不确定”之一。

最大值

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

进度条的当前值。在“确定”模式下,这表示完成的工作量。在“不确定”模式下,它被解释为模 maximum;也就是说,当进度条的值增加 maximum 时,进度条完成一个“周期”。

变量

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

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

25.2.6.2. ttk.Progressbar

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

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

step(amount=None)

将进度条值增加 amount

如果省略,amount 默认为1.0。

stop()

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

25.2.7. 分隔器

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

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

25.2.7.1. 选项

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

选项

描述

东方

“水平”或“垂直”之一。指定分隔符的方向。

25.2.8. 大小抓

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

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

25.2.8.1. 平台特定的笔记

  • 在Mac OS X上,顶级窗口默认情况下会自动包括内置大小的手柄。添加 Sizegrip 是无害的,因为内置的抓地力将只是掩盖小部件。

25.2.8.2. 虫子

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

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

25.2.9. 树视图

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

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

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

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

Treeview小部件支持水平和垂直滚动,根据 Scrollable Widget Options 中描述的选项和方法 Treeview.xview()Treeview.yview()

25.2.9.1. 选项

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

选项

描述

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

显示列

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

高度

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

填充

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

选择模式

控制内置类绑定如何管理选择。 “扩展”,“浏览”或“无”之一。如果设置为“扩展”(默认),可以选择多个项目。如果“浏览”,则一次只选择一个项目。如果“无”,则不会更改选择。

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

显示

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

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

  • 标题:显示标题行。

默认值是“树标题”,即显示所有元素。

注意:列#0始终引用树列,即使未指定show =“tree”。

25.2.9.2. 项目选项

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

选项

描述

文本

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

图片

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

与项目关联的值的列表。

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

打开

True/False值,表示项目的子项是否应显示或隐藏。

标签

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

25.2.9.3. 标签选项

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

选项

描述

前景

指定文本前景颜色。

背景

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

字体

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

图片

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

25.2.9.4. 列标识符

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

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

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

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

笔记:

  • 项目的选项值可以按与存储它们的顺序不同的顺序显示。

  • 列#0始终引用树列,即使未指定show =“tree”。

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

25.2.9.5. 虚拟事件

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

事件

描述

<< TreeviewSelect >>

每当选择更改时生成。

“TreeviewOpen”

在设置之前生成焦点项打开= True。

<< TreeviewClose >>

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

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

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

newchildren 替代 item 的孩子。

存在于 item 中的不存在于 newchildren 中的儿童从树中分离。 newchildren 中没有项目可能是 item 的祖先。注意,不指定 newchildren 导致分离 item 的孩子。

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

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

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

有效的选项/值为:

  • ID

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

  • anchor:标准Tk锚值之一。

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

  • minwidth:width

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

  • stretch:True/False

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

  • width: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,则返回标题选项值的dict。如果指定 option,则返回该 option 的值。否则,将选项设置为相应的值。

有效的选项/值为:

  • 文本:文本

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

  • image:imageName

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

  • anchor:anchor

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

  • 命令:回调

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

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

identify(component, x, y)

返回在 xy 指定的点下指定的 component 的描述,如果在该位置没有这样的 component,则返回空字符串。

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)

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

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

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

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

有关可用点的列表,请参阅 Item Options

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 的祖先打开选项设置为 True,并在必要时滚动小部件,以便 item 位于树的可见部分内。

selection(selop=None, items=None)

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

selection_set(items)

items 成为新的选择。

selection_add(items)

items 添加到选择。

selection_remove(items)

从选择中删除 items

selection_toggle(items)

切换 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 的选项设置的dict。如果指定了 option,则返回指定 tagnameoption 的值。否则,将选项设置为给定 tagname 的相应值。

tag_has(tagname, item=None)

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

可用性:Tk 8.6

xview(*args)

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

yview(*args)

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

25.2.10. 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 中的每个键都是一个选项,每个值都应该是一个列表或元组(通常)包含以元组,列表或其他首选项分组的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()

注意,如果在前台选项中将顺序更改为 [('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 应该是一个列表或一些其他序列类型(不包括字符串),其中每个项目应该是一个元组,第一个项目是布局名称,第二个项目应该具有 Layouts 中描述的格式。

要理解格式,请参阅以下示例(它不是用于做任何有用的操作):

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是最多四个整数的列表,分别指定左边,上边,右边和底边界。

  • height = height

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

  • padding = padding

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

  • sticky = spec

    指定图像如何放置在最终宗地中。 spec包含零个或多个字符“n”,“s”,“w”或“e”。

  • width = width

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

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

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

例如,让我们改变默认主题的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,则返回正在使用的主题。否则,将当前主题设置为 themename,刷新所有窗口小部件并发出<< ThemeChanged >>事件。

25.2.10.1. 布局

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

  • 侧:哪边

    指定空腔的哪一侧放置元素;顶部,右侧,底部或左侧之一。如果省略,则元件占据整个空腔。

  • sticky:nswe

    指定元素放置在其分配的宗地内的位置。

  • 单位:0或1

    如果设置为1,则导致元素及其所有后代被视为单个元素,用于 Widget.identify() 等人的目的。它用于像带有夹点的滚动条缩略图。

  • 儿童:[sublayout ...]

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