ttk

ttk - Tk主题工具

ttk模块提供对Tk 8.5中引入的Tk主题窗口小部件集的访问。如果Python未针对Tk 8.5进行编译,只要安装了Tile即可继续使用此模块。然而,新的Tk提供的一些功能,如X11下的反锯齿字体渲染,窗口透明度(在X11上,您将需要一个合成窗口管理器)将会丢失。

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

扩展内容

Tk Widget样式支持为Tk带来主题支持的文档

1.使用Ttk

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

import ttk

但是这样的代码:

from Tkinter import *

可以选择使用这个:

from Tkinter import * from ttk import *

然后,几个ttk小部件(Button,Checkbutton,Entry,Frame,Label,LabelFrame,Menubutton,PanedWindow,Radiobutton,Scale和Scrollbar)将自动替换Tk小部件。

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

扩展内容

转换现有的应用程序以使用Tile小部件一种文本,它以Tcl的形式谈论通常在转换应用程序以使用新小部件时发现的差异。

2. Ttk部件

Ttk带有17个小部件,其中11个已经存在于Tkinter中:Button,Checkbutton,Entry,Frame,Label,LabelFrame,Menubutton,PanedWindow,Radiobutton,Scale和Scrollbar。 6个新的窗口小部件类是:Combobox,Notebook,Progressbar,Separator,Sizegrip和Treeview。 所有这些类都是Widget的子类。

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

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

3.工具

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

3.1 标准选项

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

选项描述
指定窗口类。该类用于查询窗口其他选项的选项数据库,确定窗口的默认绑定标签并选择窗口小部件的默认布局和样式。这是只能在窗口创建时指定的只读选项。
光标指定要用于小部件的鼠标光标。如果设置为空字符串(缺省值),则光标将从父窗口小部件继承。
采取重点确定在键盘遍历期间窗口是否接受焦点。0,1或返回一个空字符串。如果为0,则在键盘遍历期间应该完全跳过该窗口。如果为1,只要窗口可见,窗口应该接收输入焦点。一个空字符串意味着遍历脚本决定是否关注窗口。
样式可用于指定自定义小部件样式。

3.2 可滚动的部件选项

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

选项描述
xscrollcommand用于与水平滚动条进行通信。当小部件窗口中的视图改变时,小部件将根据滚动命令生成Tcl命令。通常这个选项由一些滚动条的Scrollbar.set()方法组成。这将导致滚动条在窗口中的视图改变时被更新。
yscrollcommand用于与垂直滚动条进行通信。有关更多信息,请参阅上文。

3.3 标签选项

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

选项描述
文本指定要在小部件内显示的文本字符串。
textVariable指定一个名称,其值将用于代替文本选项资源。
强调如果设置,则指定字符的索引(从0开始)以在文本字符串中加下划线。下划线字符用于助记符激活。
图片指定要显示的图像。这是一个或多个元素的列表。第一个元素是默认图像名称。列表的其余部分是由Style.map()定义的一系列statespec / value对,指定在小部件处于特定状态或状态组合时要使用的不同图像。列表中的所有图像应具有相同的大小。
复合指定如何在文本和图像选项都存在的情况下显示相对于文本的图像。有效值为:文本:仅显示文本图像:仅显示图像顶部,底部,左侧,右侧:分别显示图像上方,下方,左侧或右侧的图像。none:默认值。显示图像如果存在,否则显示文本。
宽度如果大于零,则指定为文本标签分配多少字符宽度空间; 如果小于零,则指定最小宽度。如果为零或未指定,则使用文本标签的自然宽度。

  • 文本:仅显示文本

  • 图像:仅显示图像

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

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

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.

3.4 兼容性选项

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

3.5 Widget区域

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

标志描述
active鼠标光标位于窗口小部件上并按下鼠标按钮将导致一些操作发生。
disabled在程序控制下,Widget被禁用。
focus小工具有键盘焦点。
pressed小工具被按下。
selected“开”,“真”或“当前”,例如Checkbuttons和单选按钮。
backgroundWindows和Mac有一个“活动”或前景窗口的概念。背景状态在后台窗口中为小部件设置,并在前台窗口中清除。
readonly小部件不应允许用户修改。
alternate特定于窗口小部件的替代显示格式。
invalid小部件的值是无效的。

状态规范是一系列状态名称,可选地以感叹号作为前缀,指示该位关闭。

3.6 ttk.Widget

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

class ttk.Widgetidentify(x, y)

返回位于所述元素的名称X ÿ,或空字符串,如果点不任何元件之内。

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

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

测试小部件的状态。 如果未指定回调,则返回True,否则返回True。否则返回False。 如果指定了回调,那么如果小部件状态匹配statespec,则会使用args调用回调。

state([statespec=None])

修改或读取小部件状态。如果指定了statespec,则相应地设置窗口小部件的状态,并返回一个新的statespec来指示哪些标志已更改。如果没有指定statespec,则返回当前启用的状态标志。

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

4.组合框

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。

4.1 选项

该小部件接受以下选项:

选项描述
exportselection布尔值。如果设置,则窗口小部件选择链接到窗口管理器选择(例如,可以通过调用Misc.selection_get()返回)。
justify指定文本在窗口小部件中的排列方式。“左”,“中”或“右”之一。
height以行为单位指定弹出式列表框的高度。
postcommand一个脚本(可能注册了Misc.register()),在显示值之前立即调用它。它可以指定显示哪些值。
state“正常”,“只读”或“禁用”之一。在“只读”状态下,该值可能不会被直接编辑,并且用户只能从下拉列表中选择其中一个值。在“正常”状态下,文本字段可直接编辑。在“禁用”状态下,不可能进行交互。
textVariable指定一个名称,其值与小部件值链接。每当与该名称关联的值发生更改时,窗口小部件值就会更新,反之亦然。请参阅Tkinter.StringVar。
values指定要在下拉列表框中显示的值列表。
width以小部件字体的平均大小字符指定指示输入窗口的所需宽度的整数值。

4.2 虚拟事件

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

4.3. ttk.Combobox

class ttk.Comboboxcurrent([newindex=None])

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

get()

返回组合框的当前值。

set(value)

将组合框的设置为

5.Notebook

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

5.1 选项

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

选项描述
高度如果存在且大于零,则指定窗格区域的所需高度(不包括内部填充或制表符)。否则,将使用所有窗格的最大高度。
填充指定要在笔记本外围添加的额外空间量。填充是最多四个长度规格的列表:左上方右下方。如果指定的元素少于四个,则底部默认为顶部,右侧默认为左侧,顶部默认为左侧。
宽度如果存在且大于零,则指定窗格区域的所需宽度(不包括内部填充)。否则,将使用所有窗格的最大宽度。

5.2 标签选项

还有标签的特定选项:

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

5.3 标签标识符

存在于几种方法中的tab_idttk.Notebook可以采取以下任何形式:

  • 介于零和选项卡数之间的整数。

  • 子窗口的名称。

  • 表单“@ x,y”的位置规范,用于标识选项卡。

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

  • 文字字符串“end”,它返回选项卡的数量(仅适用于Notebook.index())。

5.4 虚拟事件

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

5.5. ttk.Notebook

class ttk.Notebook

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

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

请参阅选项卡选项以获取可用选项的列表。

forget(tab_id)

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

hide(tab_id)

隐藏由tab_id指定的选项卡。

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

identify(x, y)

返回位置xy处的制表符元素的名称,如果没有,则返回空字符串。

index(tab_id)

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

insert(pos, child, **kw)

在指定的位置插入窗格。

pos是字符串“结束”,一个整数索引或管理的孩子的名字。如果孩子已经被笔记本管理,将其移动到指定的位置。

请参阅选项卡选项以获取可用选项的列表。

select([tab_id])

选择指定的tab_id

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

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

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

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

tabs()

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

enable_traversal()

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

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

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

  • Shift-Control-Tab:选择当前选定的标签之前的标签。

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

可以启用单个顶层中的多个笔记本进行遍历,包括嵌套笔记本。但是,笔记本遍历只有在所有窗格都有作为主人的笔记本时才能正常工作。

6.进度条

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

6.1 选项

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

选项描述
“水平”或“垂直”之一。指定进度条的方向。
长度指定进度条的长轴的长度(如果是水平则为宽度,如果为垂直则为高度)。
模式“确定性”或“不确定性”之一。
最大指定最大值的数字。默认为100。
进度条的当前值。在“确定”模式下,这表示完成的工作量。在“不确定”模式下,它被解释为模最大值; 也就是说,进度条在其值最大增加时完成一个“循环”。
变量与选项值链接的名称。如果指定,则修改后者时,进度栏的值会自动设置为该名称的值。
只读选项。只要该值大于0并且在确定模式下小于最大值,该部件就会周期性地增加此选项的值。该选项可以被当前主题使用以提供额外的动画效果。

6.2. ttk.Progressbar

class ttk.Progressbarstart([interval])

开始自动增量模式:计划一个重复计时器事件,该事件调用Progressbar.step()每个间隔毫秒。如果省略,则时间间隔默认为50毫秒。

step([amount])

数量 增加进度条的值。

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

stop()

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

7.分离器

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

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

7.1 选项

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

选项描述
orient“水平”或“垂直”之一。指定分隔符的方向。

8. Sizegrip

ttk.Sizegrip微件(也称为成长盒)允许用户通过按下并拖动把手来调整含顶层窗口。

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

8.1 平台特定的注释

  • 在Mac OS X上,顶层窗口默认会自动包含一个内置的大小夹点。 添加一个Sizegrip是无害的,因为内置的抓取只会掩盖widget.8.2.Bugs

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

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

9.树视图

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

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

每个项目都由一个唯一的名称标识。如果它们不是由调用者提供的,该小部件将生成项目ID。有一个杰出的根项目,命名{}。根项目本身不显示; 其子女出现在层次结构的顶层。

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

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

9.1 选项

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

选项描述
列标识符列表,指定列数及其名称。
displaycolumns一列列标识符(符号或整数索引),用于指定显示哪些数据列及其出现顺序或字符串“#all”。
高度指定应该可见的行数。注意:请求的宽度由列宽的总和确定。
填充指定小部件的内部填充。填充是最多四个长度规格的列表。
选择模式控制内置类绑定如何管理选择。“扩展”,“浏览”或“无”之一。如果设置为“扩展”(默认),则可以选择多个项目。如果“浏览”,则一次只能选择一个项目。如果“无”,选择将不会改变。请注意,无论此选项的值如何,应用程序代码和标签绑定都可以设置所需的选择。
显示包含零个或多个以下值的列表,指定要显示的树的哪些元素。树:显示列#0中的树标签。标题:显示标题行。默认是“树状标题”,即显示所有元素。注意:即使未指定show =“tree”,列#0始终指向树列。

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

  • 标题:显示标题行。

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

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

9.2 项目选项

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

选项描述
文本要为项目显示的文本标签。
图片Tk图像,显示在标签的左侧。
与该项目关联的值列表。每个项目都应该具有与小部件选项列相同数量的值。如果数值少于列数,则其余数值假定为空。如果有多个列的值,则会忽略额外的值。
打开真/假值指示项目的孩子是否应该显示或隐藏。
标签与此商品相关的标签列表。

9.3 标签选项

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

选项描述
前景指定文本前景色。
背景指定单元格或项目背景颜色。
字体指定绘制文本时使用的字体。
图片指定项目图像,以防项目的图像选项为空。

9.4 列标识符

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

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

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

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

注意:

  • 商品的选项值可能以不同于其存储顺序的顺序显示。

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

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

9.5 虚拟事件

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

事件描述
<< TreeviewSelect >>每当选择更改时生成。
<< TreeviewOpen >>在设置要打开的焦点项目之前生成= True。
<< TreeviewClose >>在将焦点项目设置为打开= False之后生成。

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

9.6. ttk.Treeview

class ttk.Treeviewbbox(item, column=None)

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

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

get_children([item])

返回属于项目的子列表。

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

set_children(item, *newchildren)

用新的子项目替换子项目

项目 中出现的不在新的子项目身上的项目从树上分离。在没有项目newchildren可能的父项目。请注意,不指定newchildren会导致分离项目的子项。

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

查询或修改指定的选项。

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

有效的选项/值是:

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

  • 锚点:标准Tk锚点值之一。指定该列中的文本应该如何与单元格对齐。

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

  • stretch:True / False指定在调整窗口小部件时是否应调整列的宽度。

  • width:width列的宽度(以像素为单位)。要配置树列,请使用column =“#0”调用此命令delete(* items)删除所有指定的项目及其所有后代。根项目可能不会被删除.detach *项目)取消树中所有指定项目的链接。项目及其所有后代仍然存在,可能会重新插入树中的其他位置,但不会显示。根项目可能无法分离。存在 (item)如果指定的项目存在于tree.focus([item = None])中,则返回True。如果指定item,则将焦点项目设置为item。 否则,返回当前的焦点项,或者''如果没有.heading(column,option = None,** kw)查询或修改指定列的标题选项。如果没有给出kw,则返回一个字典 标题选项值。 如果指定了选项,则返回该选项的值。 否则,将选项设置为相应的值。有效选项/值为:

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

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

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

  • command:callback当按下标题标签时要调用的回调函数。要配置树列标题,请使用column =“#0”调用此函数.identify(component,x,y)返回该点下指定组件的描述由x和y给出,或者如果在该位置不存在这样的组件,则为空字符串.identify_row(y)返回位置y处的项目的项目ID。返回位置x处的单元的数据列标识符。树列有ID#0.identify_region(x,y)返回下列值之一:regionmeaningheadingTree标题area.separatorSpace两列之间headings.tree树area.cellA数据单元格。

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

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

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

  • sticky = spec指定图像放置在最终宗地内的方式。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已经存在,那是错误的。如果指定了父项,则新主题将继承父主题的样式,元素和布局。如果存在设置,则预计它们具有与用于的相同的语法theme_settings()

theme_settings(themename, settings)

暂时将当前主题设置为主题名称,应用指定的设置,然后恢复以前的主题。

设置中的每个键都是一种样式,每个值可以包含键'configure','map','layout'和'element create',并且它们预期具有Style.configure()方法指定的相同格式, Style.map(),Style.layout()和Style.element_create()。

作为一个例子,让我们稍微改变默认主题的Combobox:

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

10.1 布局

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

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

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

  • unit:0或1。如果设置为1,则将元素及其所有后代作为单个元素处理,以用于Widget.identify()等。它用于像滚动条大拇指一样的东西。

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