028-86922220

建站动态

根据您的个性需求进行定制 先人一步 抢占小程序红利时代

创新互联Python教程:tkinter.ttk—-Tk风格的控件

tkinter.ttk —- Tk 风格的控件

源代码: Lib/tkinter/ttk.py

创新互联坚持“要么做到,要么别承诺”的工作理念,服务领域包括:成都网站设计、网站制作、外贸营销网站建设、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的高邮网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!


The tkinter.ttk module provides access to the Tk themed widget set, introduced in Tk 8.5. It provides additional benefits including anti-aliased font rendering under X11 and window transparency (requiring a composition window manager on X11).

tkinter.ttk 的基本设计思路,就是尽可能地把控件的行为代码与实现其外观的代码分离开来。

参见

Tk 控件风格

介绍 Tk 风格的文档

ttk 的用法

使用 ttk 之前,首先要导入模块:

 
 
 
 
  1. from tkinter import ttk

为了覆盖基础的 Tk 控件,应该在 Tk 之后进行导入:

 
 
 
 
  1. from tkinter import *
  2. from tkinter.ttk import *

这段代码会让以下几个 tkinter. ttk 控件(Button, Checkbutton, Entry, Frame, Label, LabelFrame, Menubutton, PanedWindow, Radiobutton, Scale 和 Scrollbar)自动替换掉 Tk 的对应控件。

使用新控件的直接好处,是拥有更好的跨平台的外观,但新旧控件并不完全兼容。主要区别在于,Ttk 组件不再包含“fg”、“bg”等与样式相关的属性 。而是用 ttk.Style 类来定义更美观的样式效果。

参见

Converting existing applications to use Tile widgets

此文介绍迁移为新控件时的常见差别(使用 Tcl )。

ttk 控件

ttk 中有 18 种部件 ,其中 12 种在 tkinter 中已包含了: Button 、 Checkbutton 、Entry 、 Frame 、 Label, LabelFrame 、 Menubutton 、PanedWindow 、Radiobutton 、 Scale 、 Scrollbar 和 Spinbox。另有 6 种是新增的: Combobox 、 Notebook 、 Progressbar 、 Separator 、 Sizegrip 和 Treeview。这些控件全都是 Widget 的子类。

ttk 控件可以改善应用程序的外观。如上所述,修改样式的代码与 tk 控件存在差异。

Tk 代码:

 
 
 
 
  1. l1 = tkinter.Label(text="Test", fg="black", bg="white")
  2. l2 = tkinter.Label(text="Test", fg="black", bg="white")

Ttk 代码:

 
 
 
 
  1. style = ttk.Style()
  2. style.configure("BW.TLabel", foreground="black", background="white")
  3. l1 = ttk.Label(text="Test", style="BW.TLabel")
  4. l2 = ttk.Label(text="Test", style="BW.TLabel")

有关 TtkStyling 的更多信息,请参阅 Style 类文档。

控件

ttk.Widget 定义了 Tk 风格控件支持的标准属性和方法,不应直接对其进行实例化。

标准属性

所有 ttk 控件均可设置以下属性:

属性

描述

class

指定窗口类。若要从参数库中查找窗口的其他属性,或确认窗口的默认绑定标签,或选择控件的默认布局和样式,会用到 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 和 image 属性时,应如何显示文本和对应的图片。合法的值包括:

  • text::只显示文本

  • image:只显示图片

  • top、bottom、left、right:分别在文本的上、下、左、右显示图片。

  • none:默认值。 如果给出了图片则显示,否则显示文本。

width

如果值大于零,指定文本标签留下多少空间,单位是字符数;如果值小于零,则指定最小宽度。如果等于零或未指定,则使用文本标签本身的宽度。

兼容性属性

属性

描述

state

可以设为“normal”或“disabled”,以便控制“禁用”状态标志位。本属性只允许写入:用以改变控件的状态,但 Widget.state() 方法不影响本属性。

控件状态

控件状态是多个相互独立的状态标志位的组合。

标志位

描述

active

鼠标光标经过控件并按下鼠标按钮,将引发动作。

disabled

控件处于禁用状态,而由程序控制。

focus

控件接受键盘焦点。

pressed

控件已被按下。

selected

勾选或单选框之类的控件,表示启用、选中状态。

background

Windows 和 Mac 系统的窗口具有“激活”或后台的概念。后台窗口的控件会设置 foreground 参数,而前台窗口的控件则会清除此状态。

readonly

控件不允许用户修改。

alternate

控件的备选显式格式。

invalid

控件的值是无效的

所谓的控件状态,就是一串状态名称的组合,可在某个名称前加上感叹号,表示该状态位是关闭的。

ttk.Widget

除了以下方法之外,ttk.Widget 还支持 tkinter.Widget.cget() 和 tkinter.Widget.configure() 方法。

class tkinter.ttk.Widget

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

布尔值,如果设为 True,则控件的选中文字将关联为窗口管理器的选中文字(可由 Misc.selection_get 返回)。

justify

指定文本在控件中的对齐方式。可为 left、center、right 之一。

height

设置下拉列表框的高度。

postcommand

在显示之前将被调用的代码(可用 Misc.register 进行注册)。可用于选择要显示的值。

state

normal 、readonly 或 disabled。在 readonly 状态下,数据不能直接编辑,用户只能从下拉列表中选取。在 normal 状态下,可直接编辑文本框。在 disabled 状态下,无法做任何交互。

textvariable

设置一个变量名,其值与控件的值关联。每当该变量对应的值发生变动时,控件值就会更新,反之亦然。参见 tkinter.StringVar 。

values

设置显示于下拉列表中的值。

width

设置为整数值,表示输入窗口的应有宽度,单位是字符单位(控件字体的平均字符宽度)。

虚拟事件

当用户从下拉列表中选择某个元素时,控件会生成一条 <> 虚拟事件。

ttk.Combobox

class tkinter.ttk.Combobox

Spinbox

ttk.Spinbox 控件是 ttk.Entry 的扩展,带有递增和递减箭头。可用于数字或字符串列表。这是 Entry 的子类。

除了从 Widget 继承的 Widget.cget() 、 Widget.configure() 、Widget.identified() 、 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 回调函数。只要递增或递减按钮按下之后,就会进行不带参数的调用。

虚拟事件

用户若按下 ,则控件会生成 <> 虚拟事件,若按下 则会生成 <> 事件。

ttk.Spinbox

class tkinter.ttk.Spinbox

Notebook

Ttk Notebook widget manages a collection of windows and displays a single one at a time. Each child window is associated with a tab, which the user may select to change the currently displayed window.

属性

控件可设置以下属性:

属性

描述

height

如若给出且大于 0,则指定面板的应有高度(不含内部 padding 或 tab)。否则会采用所有子窗口面板的最大高度。

padding

指定在控件外部添加的留白。padding 是最多包含四个值的列表,指定左顶右底的空间。如果给出的元素少于四个,底部值默认为顶部值,右侧值默认为左侧值,顶部值默认为左侧值。

width

若给出且大于 0,则设置面板的应有宽度(不含内部 padding)。否则将采用所有子窗口面板的最大宽度。

Tab 属性

Tab 特有属性如下:

属性

描述

state

可为 normal、disabled 或 disabled 之一。若为 disabled 则不能选中。若为 hidden 则不会显示。

sticky

指定子窗口在面板内的定位方式。应为包含零个或多个 n、s、e 、w 字符的字符串。每个字母表示子窗口应紧靠的方向(北、南、东或西),正如 grid() 位置管理器所述。

padding

指定控件和面板之间的留白空间。格式与本控件的 padding 属性相同。

text

指定显示在 tab 上的文本。

image

指定显示在 tab 上的图片。参见 Widget 的 image 属性。

compound

当文本和图片同时存在时,指定图片相对于文本的显示位置。合法的属性值参见 Label Options 。

underline

指定下划线在文本字符串中的索引(基于0)。如果调用过了 Notebook.enable_traversal(),带下划线的字符将用于激活快捷键。

Tab ID

The tab_id present in several methods of ttk.Notebook may take any of the following forms:

虚拟事件

当选中一个新 tab 页之后,控件会生成一条 <> 虚拟事件。

ttk.Notebook

class tkinter.ttk.Notebook

Progressbar

ttk.Progressbar 控件可为长时间操作显示状态。可工作于两种模式:1)determinate 模式,显示相对完成进度;2) indeterminate 模式,显示动画让用户知道工作正在进行中。

属性

控件可设置以下属性:

属性

描述

orient

horizontal 或 vertical。指定进度条的显示方向。

length

指定进度条长轴的长度(横向为宽度,纵向则为高度)。

mode

determinate 或 indeterminate。

maximum

设定最大值。默认为 100。

value

进度条的当前值。在 determinate 模式下代表已完成的工作量。在 indeterminate 模式下,解释为 maximum 的模;也就是说,当本值增至 maximum 时,进度条完成了一个“周期”。

variable

与属性值关联的变量名。若给出,则当变量值变化时会自动设为进度条的值。

phase

只读属性。只要值大于 0 且在 determinate 模式下小于最大值,控件就会定期增大该属性值。当前主题可利用本属性提供额外的动画效果。

ttk.Progressbar

class tkinter.ttk.Progressbar

Separator

ttk.Separator 控件用于显示横向或纵向的分隔条。

除由 ttk.Widget 继承而来的方法外,没有定义其他方法。

属性

属性如下:

属性

描述

orient

horizontal 或 vertical。指定分隔条的方向。

Sizegrip

ttk.Sizegrip 控件允许用户通过按下并拖动控制柄来调整内部顶层窗口的大小。

除由 ttk.Widget 继承的之外,没有其他属性和方法。

与平台相关的注意事项

Bug

Treeview

ttk.Treeview 控件可将多项内容分层级显示。每个数据项抖带有一个文本标签、一张图片(可选)和一个数据列表(可选)。这些数据值将在树标签后面分列显示。

数据值的显示顺序可用属性 displaycolumns 进行控制。树控件还可以显示列标题。数据列可通过数字或名称进行访问,各列的名称在属性 columns 中列出。参阅 Column Identifiers。

每个数据项都由唯一名称进行标识。如果调用者未提供数据项的 ID,树控件会自动生成。根有且只有一个,名为 {}。根本身不会显示出来;其子项将显示在顶层。

每个数据项均带有一个 tag 列表,可用于绑定事件及控制外观。

Treeview 组件支持水平和垂直滚动,滚动时会依据 Scrollable Widget Options 描述的属性和 Treeview.xview() 和 Treeview.yview() 方法。

属性

控件可设置以下属性:

属性

描述

columns

列标识的列表,定义了列的数量和名称。

displaycolumns

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

height

指定可见的行数。注意:所需宽度由各列宽度之和决定。

padding

指定控件内部的留白。为不超过四个元素的长度列表。

selectmode

控制内部类如何进行选中项的管理。可为 extended、browse 或 none。若设为 extended(默认),则可选中多个项。若为 browse ,则每次只能选中一项。若为 none,则无法修改选中项。

请注意,代码和 tag 绑定可自由进行选中操作,不受本属性的限制。

show

由0个或下列值组成的列表,指定要显示树的哪些元素。

  • tree :在 #0 列显示树的文本标签。

  • headings :显示标题行。

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

注意 :第 #0 列一定是指 tree 列,即便未设置 show=”tree” 也一样。

数据项的属性

可在插入和数据项操作时设置以下属性。

属性

描述

text

用于显示的文本标签。

image

Tk 图片对象,显示在文本标签左侧。

values

关联的数据值列表。

每个数据项关联的数据数量应与 columns 属性相同。如果比 columns 属性的少,剩下的值将视为空。如果多于 columns 属性的,多余数据将被忽略。

open

True 或 False,表明是否显示数据项的子树。

tags

与该数据项关联的 tag 列表。

tag 属性

tag 可定义以下属性:

属性

描述

foreground

定义文本前景色。

background

定义单元格或数据项的背景色。

font

定义文本的字体。

image

定义数据项的图片,当 image 属性为空时使用。

列标识

列标识可用以下格式给出:

注意:

数据列号是指属性值列表中的索引值,显示列号是指显示在树控件中的列号。树的文本标签将显示在 #0 列。如果未设置 displaycolumns 属性,则数据列 n 将显示在第 #n+1 列。再次强调一下,#0 列一定是指 tree 列 。

虚拟事件

Treeview 控件会生成以下虚拟事件。

事件

描述

<>

当选中项发生变化时生成。

<>

当焦点所在项的 open= True 之前立即生成。

<>

当焦点所在项的 open= True 之后立即生成。

Treeview.focus() 和 Treeview.selection() 方法可用于确认涉及的数据项。

ttk.Treeview

class tkinter.ttk.Treeview

Ttk 样式

ttk 的每种控件都赋有一个样式,指定了控件内的元素及其排列方式,以及元素属性的动态和默认设置。默认情况下,样式名与控件的类名相同,但可能会被控件的 style 属性覆盖。如果不知道控件的类名,可用 Misc.winfo_class() 方法获取(somewidget.winfo_class())。

参见

Tcl’2004 conference presentation

文章解释了主题引擎的工作原理。

class tkinter.ttk.Style

用于操控样式数据库的类。

布局

布局在没有属性时可以为 None ,或是定义了元素排列方式的属性字典。布局机制采用了位置管理器的简化版本:给定一个初始容器(cavity),为每个元素都分配一个包装盒(parcel)。合法的选项/值包括:

  • side: whichside

    指定元素置于容器的哪一侧; 顶、右、底或左。如果省略,则该元素将占据整个容器。

  • sticky: nswe

    指定元素在已分配包装盒内的放置位置。

  • unit: 0 或 1

    如果设为 1,则将元素及其所有后代均视作单个元素以供 Widget.identify() 等使用。 它被用于滚动条之类带有控制柄的东西。

  • children: [sublayout… ]

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


本文题目:创新互联Python教程:tkinter.ttk—-Tk风格的控件
链接URL:http://www.tsicrk.com/article/dpdsigc.html

其他资讯

让你的专属顾问为你服务

1.2661s