13518219792

建站动态

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

创新互联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, ScaleScrollbar)自动替换掉 Tk 的对应控件。

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

参见

Converting existing applications to use Tile widgets

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

ttk 控件

ttk 中有 18 种部件 ,其中 12 种在 tkinter 中已包含了: ButtonCheckbuttonEntryFrameLabel, LabelFrameMenubuttonPanedWindowRadiobuttonScaleScrollbar 和 Spinbox。另有 6 种是新增的: Combobox 、 Notebook 、 Progressbar 、 SeparatorSizegrip 和 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

TrueFalse,表明是否显示数据项的子树。

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://cdbrznjsb.com/article/dpdsigc.html

其他资讯

让你的专属顾问为你服务