更多《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()

创建一个 ttk 按钮:

from tkinter import *
from tkinter import ttkroot = Tk()
btn = ttk.Button(root,text="ttk 按钮")
btn.pack()root.mainloop()

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


从截图可以明显看出 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()

使用 ttk 控件的代码:

from tkinter import *
from tkinter import ttkroot = 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()

以下是代码执行的结果:


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

由于 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 控件被按下
selected Ontruecurrent 用于诸如 Checkbuttons 和 radiobuttons 之类的东西
background Windows和Mac有一个“active”或前景窗口的概念。背景状态在后台窗口中为控件设置,并在前台窗口中清除。
readonly 只读,不允许用户改动
alternate 特定于窗口控件件的替代显示格式。
invalid 控件的值无效。

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

《tkinter实用教程二》tkinter的子模块ttk相关推荐

  1. 《tkinter实用教程四》tkinter 布局管理 Grid

    更多<Tkinter 实用教程>系列文章 tkinter 表格布局管理 Grid 在学习其他控件之前,我们需要先了解 tkinter 布局管理概念(解决控件放在哪里的问题). 虽然, tk ...

  2. 《tkinter实用教程21》treeview 节点插入、单选、多选、事件、树、表格

    TreeView 的使用方法 Treeview 组件是 ttk 模块的组件之一,它既可以作为树结构使用,也可以作为表格展示数据(tkinter 并没有表格控件). 和常见的树装结构一样,当 Treev ...

  3. 《tkinter实用教程一》Linux环境下安装tkinter

    更多<Tkinter 实用教程>系列文章 在 Linux 环境下安装 tkinter tkinter 是 Python 编程语言中描述用于构建图形用户界面 (GUI) 的控件集,因此,学习 ...

  4. python pyquery不规则数据的抓取_爬虫神器之PyQuery实用教程(二),50行代码爬取穷游网...

    爬虫神器之PyQuery实用教程(二),50行代码爬取穷游网 前言 上篇文章 PyQuery (一) 回顾.今天来介绍具体 PyQuery 的使用方法. 穷游网目标与分析 开始之前,按照之前的套路一步 ...

  5. pyhton GUI编程之Tkinter详细讲解二

    文章目录 Tkinter详细讲解 pyhton GUI编程之Tkinter详细讲解二 4. 组件用法 4.1 文本输入和输出相关控件 4.1.1 Lable标签 4.1.2 Message消息 4.1 ...

  6. python图形界面教程(tkinter)

    1.图形化界面设计的基本理解 当前流行的计算机桌面应用程序大多数为图形化用户界面(Graphic User Interface,GUI),即通过鼠标对菜单.按钮等图形化元素触发指令,并从标签.对话框等 ...

  7. pyquery获取不到网页完整源代码_爬虫神器之PyQuery实用教程(二),50行代码爬取穷游网...

    爬虫神器之PyQuery实用教程(二),50行代码爬取穷游网 前言 上篇文章 PyQuery (一) 回顾.今天来介绍具体 PyQuery 的使用方法. 穷游网目标与分析 开始之前,按照之前的套路一步 ...

  8. python3无法安装tkinter_python tkinter安装教程【python tkinter 无法安装】

    这里的path是指你下载tkinter包后解压的文径,不用带括号. 输入完后输入pip TKinter install等待 如出现TKinter........install successful便安 ...

  9. git 添加用户名和邮箱_Git实用教程(二) | Git简介及安装详解

    Git实用教程专栏回顾 Git实用教程(一) | 为什么需要版本控制?(以嵌入式项目开发为例) 1.Git简介 Git(官网 https://git-scm.com/)是一个免费开源的分布式版本控制系 ...

  10. 超全!Tkinter 使用教程!4000字!

    人生苦短,快学Python! 本期案例是带着大家制作一个属于自己的GUI图形化界面->用于设计签名的哦(效果如下图),是不是感觉很好玩,是不是很想学习呢?限于篇幅,今天我们首先详细讲述一下Tki ...

最新文章

  1. poj1226 Substrings
  2. 成功解决\PyInstaller\compat.py, line 378  out = out.decode(encoding) UnicodeDecodeError: utf-8 codec c
  3. 6.494 - Kindergarten Counting Game
  4. 事件总线第一次点击_用户体验研究指南3-3第一次点击测试
  5. 颜宁问4对科研夫妻:男科学家怎样平衡事业家庭?
  6. 什么是oracle命名,ORACLE数据库命名规范
  7. 信息学奥赛一本通 1006:A+B问题 | OpenJudge NOI 1.3 01
  8. Nginx源码分析 - 主流程篇 - 多进程的惊群和进程负载均衡处理(15)
  9. Python笔试题汇总
  10. 很值得学习的java 画图板源码
  11. 20210219 plecs为不同的PWM 配置不同的死区时间
  12. 3d Max修改器中英文对照表
  13. mmgrid cols表头列隐藏
  14. Makefile中echo和@echo、和的区别
  15. Qt调试器出现:the selected debugger may be inappropriate for the inferior的解决方案
  16. 段子界“鼻祖”将关闭服务,它提高了一代人的笑点
  17. left semi join 和 left join 区别
  18. 关于风向的u、v分量,及根据uv计算风向公式
  19. 【VUE实战问题记录】Vue 父组件调用子组件的使用方法
  20. 企业级360°全方位用户画像:环境搭建[五]

热门文章

  1. 计算机教程求和,excel筛选求和的方法步骤图
  2. android iphone 短信中心号码,iPhone设置短信中心号码失败
  3. python程度员要学很多英语吗_为什么程序员应该学好英语?
  4. HashSet为什么要设置PRESENT
  5. HTML5 progress进度条详解
  6. android网速代码,Android获取网速和下载速度
  7. oracle 怎么写报表,Oracle reports提供的六种风格报表格式
  8. 【Blender报错记录】Bone Heat Weighting: failed to find solution for one or more bones
  9. 如何提高关键词的质量度?
  10. 怎么合并mp3音频文件?