当前位置:   article > 正文

《tkinter实用教程二》tkinter的子模块ttk_tkinter ttk

tkinter ttk

更多《Tkinter 实用教程》系列文章

tkinter 的子模块 ttk

本文主要介绍 tkinter 子模块的特性,以及和原生 tkinter 控件之间的区别。

tkinter.ttk 模块提供了对 tk 风格控件集合的访问途径,在 tkinter 8.5 中引入。

引入 tkinter.ttk 的基本思想是尽可能将实现控件行为的代码与实现其外观的代码分开。

如果用一句话解释引入 ttk 的目的,那就是:

使用 ttk 控件可以改善应用程序的外观和感觉。

ttk 模块是 tkinter 的新特性,因此,建议使用 ttk 控件作为开发和学习的重点。

如何创建 ttk 控件

创建 ttk 控件的方法和 tkinter 控件的方法略有不同:

创建一个 tkinter 按钮:

from tkinter import *

root = Tk()
btn = Button(root,text="tkinter 按钮")
btn.pack()

root.mainloop()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

创建一个 ttk 按钮:

from tkinter import *
from tkinter import ttk

root = Tk()
btn = ttk.Button(root,text="ttk 按钮")
btn.pack()

root.mainloop()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

以下是两段代码的执行结果:

在这里插入图片描述
在这里插入图片描述

从截图可以明显看出 tkinter 原生按钮的样式和 ttk 模块按钮的默认样式是不一样的。

如何设置 ttk 控件的样式

ttk 子模块的引出,主要目的是解决界面美观度和分离控制代码和样式代码的目的。

所以 ttk 在样式控制上和 tkinter 有较大区别。

下面以 Label 对象为例,通过创建一个蓝底红字的标签,说明二者的主要区别:

使用 tkinter 控件的代码:

from tkinter import *

root = Tk()
l1 = Label(text="label1",fg="red",bg="blue")
l1.pack()

root.mainloop()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

使用 ttk 控件的代码:

from tkinter import *
from tkinter import ttk

root = Tk()

style_default = ttk.Style()
style_default.configure("TLabel",foreground="red",background="blue")

l1 = ttk.Label(root,text="lable1",style='TLabel')
l1.pack()

root.mainloop()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

以下是代码执行的结果:

在这里插入图片描述
在这里插入图片描述

二者在展示效果上基本没有区别,主要区别在代码的编写上。

由于 ttk 分离了控件的创建代码和样式代码,所以代码看起来比较复杂,行数较多。

实际上,ttk 由于抽离了样式代码,同样的样式只需要写一次,在创建控件的时候可以直接引用,所以当控件较多时,会极大的降低工作和代码量。

tkinter 原生控件每次创建一个控件,都需要写一遍样式代码,所以不适合使用在稍微复杂一点的应用中。

ttk 支持的控件

ttk 带有17个控件,其中11个已经存在于 tkinter 中:ButtonCheckbuttonEntryFrameLabelLabelFrameMenubuttonPanedWindowRadiobuttonScaleScrollbar

6个新的窗口控件类是:ComboboxNotebookProgressbarSeparatorSizegripTreeview。 所有这些类都是Widget的子类。

ttk 控件通用参数

ttk.Widget 类定义了 tk 风格控件的标准可选参数通用方法,该类类似于 Java 中的接口,不应该直接实例化。

  1. 所有 ttk 控件都能接受以下参数:
参数描述
class指定窗口类。 该类用于在选项数据库中查询窗口的其他选项、确定窗口的默认绑定标签以及选择控件的默认布局和样式。 此选项是只读的,只能在创建窗口时指定。
cursor指定要用于控件的鼠标光标。 如果设置为空字符串(默认值),从父控件继承光标。
takefocus确定窗口在键盘遍历期间是否接受焦点。 返回 0、1 或空字符串。 如果返回 0,则表示在键盘遍历期间应完全跳过该窗口。 如果为 1,则表示只要窗口可见,就应该接收输入焦点。 空字符串意味着遍历脚本决定是否关注窗口。
style可用于指定控件样式。
  1. 可滚动控件的通用可选参数

具备滚动条的控件支持以下可选参数:

参数描述
xscrollcommand用于与水平滚动条通信。当widget窗口中的视图发生变化时,widget会根据scrollcommand生成Tcl命令。通常这个选项由一些滚动条的Scrollbar.set()方法组成。 这将导致滚动条在窗口中的视图发生变化时更新。
yscrollcommand用于与垂直滚动条通信。 有关更多信息,请参见上文。
  1. 标签类控件的通用参数
    LabelButton类Button 控件支持以下可选参数:
参数描述
text指定在控件中展示的字符串
textvariable指定一个变量名,这个变量的值会填充text参数,展示在控件中。
underline如果设置,则指定要在文本字符串中加下划线的字符的索引(从 0 开始)。 下划线字符用于助记符激活。
image指定要显示的图像。 这是一个包含 1 个或多个元素的列表。 第一个元素是默认图像名称。 列表的其余部分是由 Style.map() 定义的一系列 statespec/value 对,指定当小部件处于特定状态或状态组合时要使用的不同图像。 列表中的所有图像都应具有相同的大小。
compound在文本和图像选项都存在的情况下,指定如何相对于文本显示图像。 有效值为:text:仅显示文本;image:仅显示图像;top、bottom、left、right:分别显示文本的上方、下方、左侧或右侧的图像。none:默认值。 显示图像(如果存在),否则显示文本。
width如果大于零,则指定为文本标签分配多少字符宽度的空间,如果小于零,则指定最小宽度。 如果为零或未指定,则使用文本标签的自然宽度。
  1. 兼容性选项
参数描述
state可设置为 normaldisabled 以控制“禁用”状态位。 这是一个只写选项:设置它会更改控件状态,但 Widget.state() 方法不影响此选项。
  1. 控件状态

控件状态由独立的状态标志组成的位图:

参数描述
active鼠标光标在小部件上,按下鼠标按钮会导致一些动作发生。
disabled在程序控制下,控件被禁用
focus焦点
pressed控件被按下
selectedOntruecurrent 用于诸如 Checkbuttons 和 radiobuttons 之类的东西
backgroundWindows和Mac有一个“active”或前景窗口的概念。背景状态在后台窗口中为控件设置,并在前台窗口中清除。
readonly只读,不允许用户改动
alternate特定于窗口控件件的替代显示格式。
invalid控件的值无效。

更多《Tkinter 实用教程》系列文章

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/400630
推荐阅读
  

闽ICP备14008679号