24.2. ttk — Tk 主题小部件

ttk模块提供对 Tk 主题小部件集的访问,该主题集已在 Tk 8.5 中引入。如果未根据 Tk 8.5 编译 Python,只要安装了 Tile,该代码仍可以使用此模块。但是,新 Tk 提供的某些Function(如 X11 下的抗锯齿字体渲染,窗口透明性(在 X11 上您将需要一个合成窗口 Management 器))将丢失。

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

See also

24.2.1. 使用 Ttk

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

import ttk

但是这样的代码:

from Tkinter import *

可能需要使用此选项:

from Tkinter import *
from ttk import *

然后,几个ttk小部件(ButtonCheckbuttonEntryFrameLabelLabelFrameMenubuttonPanedWindowRadiobuttonScaleScrollbar)将自动替换 Tk 小部件。

这具有使用新窗口小部件的直接好处,可在各个平台上提供更好的外观,但请注意它们并不完全兼容。主要区别在于,Ttk 小部件中不再存在诸如“ fg”,“ bg”之类的小部件选项以及其他与小部件样式相关的选项。使用ttk.Style可以达到相同(或更好)的样式。

See also

24.2.2. Ttk 小部件

Ttk 带有 17 个小部件,其中 11 个已在 Tkinter 中存在:ButtonCheckbuttonEntryFrameLabelLabelFrameMenubuttonPanedWindowRadiobuttonScaleScrollbar。 6 个新的窗口小部件类是:ComboboxNotebookProgressbarSeparatorSizegripTreeview。所有这些类都是Widget的子类。

如前所述,您会注意到外观和样式代码中的变化。为了演示后者,下面显示了一个非常简单的示例。

Tk code:

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类文档。

24.2.3. Widget

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

24.2.3.1. 标准选项

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

Note

OptionDescription
class指定窗口类。在选项数据库中查询窗口的其他选项,确定窗口的默认绑定标签以及选择窗口小部件的默认布局和样式时,使用该类。这是一个只读选项,只能在创建窗口时指定。
cursor指定用于窗口小部件的鼠标光标。如果设置为空字符串(默认值),则光标将从父窗口小部件继承。
takefocus确定在键盘遍历期间窗口是否接受焦点。 0、1 或返回空字符串。如果为 0,则在遍历键盘时应完全跳过窗口。如果为 1,则窗口应在可见的范围内接收 Importing 焦点。空字符串表示遍历脚本将决定是否将焦点放在窗口上。
style可用于指定自定义窗口小部件样式。

24.2.3.2. 可滚动小部件选项

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

Note

optiondescription
xscrollcommand用于与水平滚动条进行通信。


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

> 通常,此选项由某些滚动条的Scrollbar.set()方法组成。每当窗口中的视图更改时,这将导致滚动条被更新。
| yscrollcommand |用于与垂直滚动条进行通信。有关更多信息,请参见上文。

24.2.3.3. 标签选项

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

Note

optiondescription
text指定要在小部件内显示的文本字符串。
textvariable指定一个名称,该名称的值将代替文本选项资源。
underline如果设置,则指定要在文本字符串中加下划线的字符的索引(从 0 开始)。下划线字符用于助记符激活。
image指定要显示的图像。这是 1 个或多个元素的列表。第一个元素是默认图像名称。列表的其余部分是由Style.map()定义的状态规范/值对的序列,指定了在小部件处于特定状态或状态组合时要使用的不同图像。列表中的所有图像应具有相同的尺寸。
compound指定在同时显示文本和图像选项的情况下如何显示相对于文本的图像。有效值为:


> Literals:仅显示 Literals

> 图片:仅显示图片

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

> none:默认值。显示图像(如果存在),否则显示文本。
| width |如果大于零,则指定为文本标签分配多少空间(以字符宽度为单位);如果小于零,则指定最小宽度。如果为零或未指定,则使用文本标签的自然宽度。

24.2.3.4. 相容性选项

Note

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

24.2.3.5. 小部件状态

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

Note

flagdescription
active鼠标光标在小部件上,按下鼠标按钮将引起一些动作。
disabled小部件在程序控制下被禁用。
focus小部件具有键盘焦点。
pressed小部件被按下。
selected“开”,“真”或“当前”,用于诸如 Checkbutton 和单选按钮之类的东西。
backgroundWindows 和 Mac 具有“活动”或前景窗口的概念。在后台窗口中为窗口小部件设置了* background 状态,在前台窗口中为那些窗口小部件清除了 background *状态。
readonly小部件不应允许用户修改。
alternate特定于窗口小部件的备用显示格式。
invalid窗口小部件的值无效。

状态规范是状态名称的序列,可以选择在其前面加上表示该位为 OFF 的感叹号。

24.2.3.6. ttk.Widget

除了下面描述的方法外,ttk.Widget类还支持Tkinter.Widget.cget()Tkinter.Widget.configure()方法。

  • 类别 ttk. Widget
      • identify(* x y *)
      • 返回位置* x * * y *的元素名称,如果该点不在任何元素内,则返回空字符串。
  • x y *是相对于小部件的像素坐标。
  • instate(* statespec callback = None *, *args * kw *)

    • 测试小部件的状态。如果未指定回调,则如果小部件状态与* statespec 匹配,则返回True,否则返回False。如果指定了 callback,那么如果小部件状态匹配 statespec ,则使用 args *进行调用。
  • state([* statespec = None *])

    • 修改或读取窗口小部件状态。如果指定了* statespec ,则相应地设置窗口小部件状态,并返回一个新的 statespec 来指示更改了哪些标志。如果未指定 statespec *,则返回当前启用的状态标志。
  • statespec *通常是列表或 Tuples。

24.2.4. 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中描述了其他方法。

24.2.4.1. Options

该小部件接受以下选项:

Note

optiondescription
exportselection布尔值。如果设置,则将小部件选择链接到“窗口 Management 器”选择(例如,可以pass调用Misc.selection_get()返回)。
justify指定文本在小部件内的对齐方式。 “左”,“中心”或“右”之一。
height指定弹出式列表框的高度,以行为单位。
postcommand在显示值之前立即调用的脚本(可能已向Misc.register()注册)。它可以指定要显示的值。
state“正常”,“只读”或“禁用”之一。在“只读”状态下,可能无法直接编辑该值,并且用户只能从下拉列表中选择一个值。在“正常”状态下,文本字段可直接编辑。在“禁用”状态下,无法进行任何交互。
textvariable指定一个名称,该名称的值链接到窗口小部件值。每当与该名称关联的值更改时,小部件值都会更新,反之亦然。参见Tkinter.StringVar
values指定要显示在下拉列表框中的值列表。
width指定一个整数值,以小部件字体的平均大小字符表示 Importing 窗口的所需宽度。

24.2.4.2. 虚拟活动

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

24.2.4.3. ttk.Combobox

  • 类别 ttk. Combobox

      • current([* newindex = None *])
      • 如果指定了* newindex ,则将组合框值设置为元素位置 newindex *。否则,返回当前值的索引;如果当前值不在值列表中,则返回-1.
  • get ( )

    • 返回组合框的当前值。
  • set(* value *)

    • 将组合框的值设置为* value *。

24.2.5. Notebook

“ Ttk 笔记本”窗口小部件 Management 一组窗口并一次显示一个窗口。每个子窗口都与一个选项卡相关联,用户可以选择一个选项卡来更改当前显示的窗口。

24.2.5.1. Options

该小部件接受以下特定选项:

Note

optiondescription
height如果存在且大于零,则指定窗格区域的期望高度(不包括内部填充或制表符)。否则,将使用所有窗格的最大高度。
padding指定要在笔记本计算机外部添加的额外空间量。填充是最多四个长度规范的列表:左上右下。如果指定的元素少于四个,则 bottom 默认为 top,right 默认为 left,top 默认为 left。
width如果存在且大于零,则指定窗格区域的所需宽度(不包括内部填充)。否则,将使用所有窗格的最大宽度。

24.2.5.2. 标签选项

选项卡也有特定的选项:

Note

optiondescription
state“正常”,“禁用”或“隐藏”。如果“禁用”,则该选项卡不可选择。如果为“隐藏”,则不显示该选项卡。
sticky指定子窗口在窗格区域内的放置方式。值是一个包含零个或多个字符“ n”,“ s”,“ e”或“ w”的字符串。根据grid()几何图形 Management 器,每个字母都表示子窗口将粘贴的一侧(北,南,东或西)。
padding指定要在笔记本和此窗格之间添加的额外空间量。语法与此小部件使用的选项填充相同。
text指定要在选项卡中显示的文本。
image指定要在选项卡中显示的图像。请参阅Widget中描述的选项图像。
compound指定在同时显示文本和图像选项的情况下如何显示相对于文本的图像。合法值请参见Label Options
underline指定要在文本字符串中加下划线的字符的索引(从 0 开始)。如果调用了Notebook.enable_traversal(),则带下划线的字符用于助记符激活。

24.2.5.3. 标签标识符

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

  • 零到制表符数目之间的整数。

  • 子窗口的名称。

  • 格式为“ @ x,y”的位置说明,用于标识选项卡。

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

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

24.2.5.4. 虚拟活动

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

24.2.5.5. ttk.Notebook

  • 类别 ttk. Notebook
      • add(* child ** kw *)
      • 在笔记本中添加新标签。

如果窗口当前由笔记本计算机 Management 但被隐藏,则它将恢复到其先前位置。

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

  • forget(* tab_id *)

    • 删除由* tab_id *指定的选项卡,取消 Map 和取消 Management 关联的窗口。
  • hide(* tab_id *)

    • 隐藏* tab_id *指定的标签。

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

  • identify(* x y *)

    • 返回位于* x y *位置的 tab 元素的名称,如果没有则返回空字符串。
  • index(* tab_id *)

    • 返回由* tab_id 指定的选项卡的数字索引,如果 tab_id *是字符串“ end”,则返回选项卡的总数。
  • insert(* pos child ** kw *)

    • 在指定位置插入窗格。
  • pos 是字符串“ end”,整数索引或托管子项的名称。如果笔记本已经 Management child *,请将其移至指定位置。

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

  • select([[tab_id *])
    • 选择指定的* tab_id *。

将显示关联的子窗口,并且未 Map 先前选择的窗口(如果不同)。如果Ellipsis* tab_id *,则返回当前所选窗格的窗口小部件名称。

  • tab(* tab_id option = None ** kw *)
    • 查询或修改特定* tab_id *的选项。

如果未提供* kw ,则返回制表符选项值的字典。如果指定了 option ,则返回该 option *的值。否则,将选项设置为相应的值。

  • tabs ( )

    • 返回笔记本 Management 的窗口列表。
  • enable_traversal ( )

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

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

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

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

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

可以启用单个顶层中的多个笔记本进行遍历,包括嵌套的笔记本。但是,笔记本遍历仅在所有窗格都将其笔记本作为主窗格的情况下才能正常运行。

24.2.6. Progressbar

ttk.Progressbar小部件显示长时间运行的状态。它可以在两种模式下运行:确定模式显示相对于要完成的工作总量的完成数量,确定模式提供动画显示,以使用户知道正在发生的事情。

24.2.6.1. Options

该小部件接受以下特定选项:

Note

optiondescription
orient“水平”或“垂直”之一。指定进度条的方向。
length指定进度条长轴的长度(水平时为宽度,垂直时为高度)。
mode“确定”或“不确定”之一。
maximum一个数字,指定最大值。默认为 100.
value进度栏的当前值。在“确定”模式下,这表示完成的工作量。在“不确定”模式下,它被解释为模最大;也就是说,进度条的值增加* maximum *时,它完成一个“周期”。
variable与选项值链接的名称。如果指定了该名称,则进度栏的值将在修改后自动设置为该名称的值。
phase只读选项。每当其值大于 0 且在确定模式下小于最大值时,小部件会定期增加此选项的值。当前主题可以使用此选项来提供其他动画效果。

24.2.6.2. ttk.Progressbar

  • 类别 ttk. Progressbar

      • start([时间间隔])
      • 开始自动递增模式:安排一个定期计时器事件,每隔间隔毫秒调用一次Progressbar.step()。如果Ellipsis,则* interval *默认为 50 毫秒。
  • step([数量])

    • 将进度条的值增加* amount *。
  • amount *默认为 1.0(如果Ellipsis)。
  • stop ( )
    • 停止自动递增模式:取消由Progressbar.start()对此进度条发起的任何重复计时器事件。

24.2.7. Separator

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

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

24.2.7.1. Options

该小部件接受以下特定选项:

Note

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

24.2.8. Sizegrip

ttk.Sizegrip小部件(也称为“增长框”)允许用户pass按下和拖动手柄来调整包含的顶层窗口的大小。

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

24.2.8.1. 特定于平台的说明

  • 在 Mac OS X 上,默认情况下,顶层窗口会自动包含内置的尺寸夹点。添加Sizegrip是没有害处的,因为内置的夹点只会遮盖小部件。

24.2.8.2. Bugs

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

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

24.2.9. Treeview

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

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

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

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

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

24.2.9.1. Options

该小部件接受以下特定选项:

Note

optiondescription
columns列标识符的列表,用于指定列数及其名称。
displaycolumns列标识符(符号或整数索引)的列表,用于指定显示哪些数据列及其出现的 Sequences,或字符串“ #all”。
height指定应该可见的行数。注意:请求的宽度由列宽度的总和确定。
padding指定窗口小部件的内部填充。填充是最多四个长度规范的列表。
selectmode控制内置类绑定如何 Management 选择。 “扩展”,“浏览”或“无”之一。如果设置为“扩展”(默认),则可以选择多个项目。如果为“浏览”,则一次将仅选择一个项目。如果为“ none”,则选择不会更改。


> 请注意,无论此选项的值如何,应用程序代码和标签绑定都可以根据需要设置选择。
|显示|一个包含零个或多个以下值的列表,指定要显示树的哪些元素。

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

> 标题:显示标题行。

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

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

24.2.9.2. 项目选项

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

Note

optiondescription
text要显示的文本标签。
imageTk 图像,显示在标签的左侧。
values与项目关联的值列表。


> 每个项目应具有与小部件选项列相同数量的值。如果值少于列,则剩余的值将被认为是空的。如果值比列多,则多余的值将被忽略。
|| open/True/False 值,指示应显示还是隐藏该项目的子项。
| tags |与此项目关联的标签列表。

24.2.9.3. 标签选项

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

Note

optiondescription
foreground指定文本前景色。
background指定单元格或项目的背景色。
font指定在绘制文本时使用的字体。
image如果项目的图像选项为空,则指定项目图像。

24.2.9.4. 列标识符

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

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

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

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

Notes:

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

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

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

24.2.9.5. 虚拟活动

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

Note

eventdescription
<<TreeviewSelect>>每当选择更改时生成。
<<TreeviewOpen>>在将焦点项设置为 open = True 之前生成。
<<TreeviewClose>>将焦点项设置为 open = False 后立即生成。

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

24.2.9.6. ttk.Treeview

  • 类别 ttk. Treeview
      • bbox(* item column = None *)
      • 以(x,y,宽度,高度)形式返回指定* item *的边界框(相对于 treeview 小部件的窗口)。

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

  • get_children([项目])
    • 返回属于* item *的子级列表。

如果未指定* item *,则返回 root 子代。

  • set_children(* item * newchildren *)
    • 用* newchildren 替换 item *的孩子。
  • item 中存在的子代与 newchildren *中不存在的子代与树分离。 * newchildren 中的任何项目都不能是 item 的祖先。请注意,不指定 newchildren 会导致 item *的孩子分离。
  • column((* column option = None ** kw *)
    • 查询或修改指定* column *的选项。

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

有效的选项/值是:

    • id

      • 返回列名。这是一个只读选项。
    • 锚:标准 Tk 锚值之一。

      • 指定此列中的文本应相对于单元格对齐的方式。
    • minwidth: width

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

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

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

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

  • delete(*个项目)
    • 删除所有指定的* item *及其所有后代。

根项目可能不会被删除。

  • detach(*个项目)
    • 从树中取消所有指定的项目的链接。

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

根项目可能无法分离。

  • exists(项目)

    • 如果树中存在指定的* item *,则返回True
  • focus([* item = None *])

    • 如果指定了* item ,则将焦点项设置为 item *。否则,返回当前的焦点项目,如果没有,则返回。
  • heading((* column option = None ** kw *)

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

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

有效的选项/值是:

    • text: text

      • 要显示在列标题中的文本。
    • image: imageName

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

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

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

要配置树的列标题,请使用 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 *)
    • 返回以下之一:
regionmeaning
heading树标题区域。
separator两列标题之间的空格。
tree树区。
cell数据单元。

可用性:Tk 8.6.

  • identify_element(* x y *)
    • 返回位置* x y *的元素。

可用性:Tk 8.6.

  • index(项目)

    • 返回其父项的子项列表中* item *的整数索引。
  • insert(* parent index iid = None ** kw *)

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

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

  • item(项目 [,选项 [,*** kw *]])
    • 查询或修改指定* item *的选项。

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

  • move((* item parent index *)
    • 将* item 移到 parent 的子级列表中的 index *位置。

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

  • next(项目)

    • 返回* item 的下一个兄弟的标识符,如果 item *是其父项的最后一个子代,则返回”。
  • parent(项目)

    • 返回* item 的父级的 ID,如果 item *在层次结构的顶层,则返回''。
  • prev(项目)

    • 返回* item 的前一个兄弟的标识符,如果 item *是其父项的第一个子代,则返回”。
  • reattach((* item parent index *)

  • see(项目)

    • 确保项目可见。

将所有* item 的祖先打开选项设置为True,并在必要时滚动小部件,以使 item *在树的可见部分内。

  • selection([[selop = None * [,* items = None *]])

    • 如果未指定* selop *,则返回选择的项目。否则,它将根据以下选择方法进行操作。
  • selection_set(项目)

    • 项目成为新选择。
  • selection_add(项目)

    • 项目添加到选择中。
  • selection_remove(项目)

    • 从选择中删除项目
  • selection_toggle(项目)

    • 在* items *中切换每个项目的选择状态。
  • set((* item column = None value = None *)

    • 使用一个参数,返回指定* item 的列/值对的字典。有两个参数,返回指定 column 的当前值。使用三个参数,将给定 item 中的给定 column 的值设置为指定的 value *。
  • tag_bind((标记名称*,序列=无回调=无)

    • 将给定事件* sequence 的回调绑定到标签 tagname *。将事件传递给项目时,将调用该项目的每个标签选项的回调。
  • tag_configure((标记名*,选项=无,*** kw *)

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

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

  • tag_has(标签名 [,项目])
    • 如果指定了* item ,则根据指定的 item 是否具有给定的 tagname *,返回 1 或 0.否则,返回具有指定标签的所有项目的列表。

可用性:Tk 8.6

  • xview(** args *)

    • 查询或修改树视图的水平位置。
  • yview(** args *)

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

24.2.10. Ttk 样式

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

See also

  • 类别 ttk. Style

    • 此类用于操作样式数据库。
  • configure(* style query_opt = None ** kw *)

    • 以* style *查询或设置指定选项的默认值。
  • kw *中的每个键都是一个选项,每个值都是一个字符串,用于标识该选项的值。

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

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 *中的每个键都是一个选项,每个值应该是一个列表或一个 Tuples(通常),其中包含以 Tuples,列表或您喜欢的其他方式分组的状态规范。状态规范是一个或多个状态然后是一个值的组合。

An example:

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

请注意,选项的(状态,值)序列的 Sequences 很重要。在上一个示例中,例如,如果在前台选项中将 Sequences 更改为[('active', 'blue'), ('pressed', 'red')],则当小部件处于活动或按下状态时,您将看到蓝色的前台。

  • lookup((* style option state = None default = None *)
    • 返回以* style option *指定的值。

如果指定了* state ,则应为一个或多个状态的序列。如果设置了 default *参数,则在找不到选项说明的情况下,它将用作备用值。

要检查默认情况下 Button 使用的字体,请执行以下操作:

import ttk

print ttk.Style().lookup("TButton", "font")
  • layout(* style layoutspec = None *)
    • 为给定的* style 定义小部件布局。如果Ellipsis layoutspec *,则返回给定样式的布局规范。
  • layoutspec *(如果已指定)应为列表或其他某种序列类型(不包括字符串),其中每个项目应为 Tuples,第一个项目为布局名称,第二个项目应具有Layouts中描述的格式。

要了解格式,请参见以下示例(它无意做任何有用的事情):

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 *的当前主题中创建一个新元素,该元素应为“图像”,“来自”或“ vsapi”。后者仅在 Windows XP 和 Vista 的 Tk 8.6a 中可用,此处不再赘述。

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

Note

    • border=padding
  • padding 是最多四个整数的列表,分别指定左边界,上边界,右边界和下边界。

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

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

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

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

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

  • element_names ( )

    • 返回当前主题中定义的元素列表。
  • element_options(元素名称)

    • 返回* elementname *选项的列表。
  • theme_create((* themename parent = None settings = None *)

    • 创建一个新主题。

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

  • theme_settings(主题名称设置)
    • 暂时将当前主题设置为* themename ,应用指定的 settings *,然后恢复之前的主题。

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

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

24.2.10.1. Layouts

如果布局不包含任何选项,则布局可以只是None,也可以是用于指定元素布置方式的选项命令。布局机制使用了打包几何 Management 器的简化版本:给定一个初始腔,为每个元素分配一个地块。有效的选项/值是:

Note

    • side: whichside
  • 指定放置元件的腔的哪一侧;顶部,右侧,底部或左侧之一。如果Ellipsis,则该元素将占据整个空腔。

    • sticky: nswe
  • 指定将元素放置在其分配的宗地内的位置。

    • 单位:0 或 1
  • 如果设置为 1,则出于Widget.identify()等人的目的,将该元素及其所有后代视为一个元素。它用于带有手柄的滚动条拇指之类的东西。

    • children: [sublayout… ]
  • 指定要放置在元素内部的元素列表。每个元素都是一个 Tuples(或其他序列类型),其中第一项是布局名称,另一个是Layout