当前位置: 首页 > news >正文

TLC/TK Adv学习笔记1 - Py版本+美化

Python下重点

tkinter.ttk 模块自 Tk 8.5 开始引入,它提供了对 Tk 风格的部件集的访问。 它还带来了一些额外好处包括在 X11 下的反锯齿字体渲染和透明化窗口(需要有 X11 上的混合窗口管理器)。
tkinter.ttk 的基本设计思路,就是尽可能地把控件的行为代码与实现其外观的代码分离开来。

所以,TTK可以更好地自定义theme来美化UI

使用方法

from tkinter import *
from tkinter.ttk import *# from tkinter import ttk # 同时保留两种控件,不推荐

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

使用新控件的直接好处,是拥有更好的跨平台的外观,但新旧控件并不完全兼容

主要区别在于,Ttk 组件不再包含“fg”、“bg”等与样式相关的属性 。
而是用 ttk.Style 类来定义更美观的样式效果。

ttk 中有 18 种部件 ,其中 12 种在 tkinter 中已包含了:

  • Button
  • Checkbutton
  • Entry
  • Frame
  • Label
  • LabelFrame
  • Menubutton
  • PanedWindow
  • Radiobutton
  • Scale
  • Scrollbar
  • Spinbox

另有 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")

TTK 通用属性

通用属性:

  • class : 指定窗口类。若要从参数库中查找窗口的其他属性,或确认窗口的默认绑定标签,或选择控件的默认布局和样式,会用到 class 属性。该属性只读,且只能在创建窗口时指定。
  • cursor : 指定控件使用的鼠标光标。若设为空字符串(默认值),则会继承父控件的光标。
  • takefocus : 决定了窗口是否可用键盘获得焦点。返回 0 、1 或空字符串。若返回 0,则表示在用键盘遍历时应该跳过该窗口。如果为 1,则表示只要窗口可见即应接收输入焦点。而空字符串则表示由遍历代码决定窗口是否接收焦点。
  • style : 可用于指定自定义控件样式。
  • state : 可以设为“normal”或“disabled”,以便控制“禁用”状态标志位。

可滚动控件的属性:

  • xscrollcommand : 水平滚动条通讯, 通常该属性由一些滚动条的 Scrollbar.set() 方法组成。当窗口中的可见内容发生变化时,将会刷新滚动条的状态。
  • yscrollcommand : 垂直滚动条通讯

标签、按钮和类似按钮的控件支持以下属性:

  • text : 指定显示在控件内的文本
  • textvariable : 指定一个变量名,其值将用于设置 text 属性。
  • underline : 设置文本字符串中带下划线字符的索引(基于0)。下划线字符用于激活快捷键。
  • image : 指定一个用于显示的图片。这是一个由1个或多个元素组成的列表。第一个元素是默认的图片名称。列表的其余部分是由 Style.map() 定义的“状态/值对”的序列,指定控件在某状态或状态组合时要采用的图片。列表中的所有图片应具备相同的尺寸。
  • compound : 指定同时存在 text 和 image 属性时,应如何显示文本和对应的图片。text/image/none/top/bottom/left/right
  • width : 如果值大于零,指定文本标签留下多少空间,单位是字符数;如果值小于零,则指定最小宽度。如果等于零或未指定,则使用文本标签本身的宽度。

控件状态

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

  • active : 鼠标光标经过控件并按下鼠标按钮,将引发动作。
  • disabled : 控件处于禁用状态,而由程序控制。
  • focus : 控件接受键盘焦点。
  • pressed : 控件已被按下。
  • selected : 勾选或单选框之类的控件,表示启用、选中状态。
  • background : Windows 和 Mac 系统的窗口具有“激活”或后台的概念。后台窗口的控件会设置 foreground 参数,而前台窗口的控件则会清除此状态。
  • readonly : 控件不允许用户修改。
  • alternate : 控件的备选显式格式。
  • invalid : 控件的值是无效的

继承 Widget的方法

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

  • identify(x, y) : 返回位于 x y 的控件名称,如果该坐标点不属于任何控件,则返回空字符串。
  • instate(statespec, callback=None, *args, **kw) : 检测控件的状态。如果没有设置回调函数,那么当控件状态符合 statespec 时返回 True,否则返回 False。如果指定了回调函数,那么当控件状态匹配 statespec 时将会调用回调函数,且会带上后面的参数。
  • state(statespec=None) : 修改或查询部件状态。 如果指定了 statespec,则会用它来设置部件状态并返回一个新的 statespec 来指明哪些旗标做过改动。 如果未指定 statespec,则返回当前启用的状态旗标。

TTK 样式

class tkinter.ttk.Style

  • configure: 查询或设置 style 的默认属性值。
  • map : 查询或设置 style 的指定属性的动态值。
  • lookup: 返回 style 中的 option 属性值。
  • layout: 按照 style 定义控件布局。如果省略了 layoutspec,则返回该样式的布局属性。
  • element_create: 使用当前theme创建新的element
  • theme_create: 新建主题
  • theme_settings: 修改主题
  • theme_use: 使用主题

ttk 的每种控件都赋有一个样式,指定了控件内的元素及其排列方式,以及元素属性的动态和默认设置。默认情况下,样式名与控件的类名相同,但可能会被控件的 style 属性覆盖。

如果不知道控件的类名,可用 Misc.winfo_class() 方法获取(somewidget.winfo_class())。

修改原来的class

from tkinter import ttk
import tkinterroot = tkinter.Tk()ttk.Style().configure("TButton", padding=6, relief="flat",background="#ccc")btn = ttk.Button(text="Sample")
btn.pack()root.mainloop()

新增一个class

import tkinter
from tkinter import ttkroot = tkinter.Tk()style = ttk.Style()
style.map("C.TButton",foreground=[('pressed', 'red'), ('active', 'blue')],background=[('pressed', '!disabled', 'black'), ('active', 'white')])colored_btn = ttk.Button(text="Test", style="C.TButton").pack()root.mainloop()

创建主题

from tkinter import ttk
import tkinterroot = 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()

简化+美化 ttk

https://ttkbootstrap.readthedocs.io/
在构建 ttkbootstrap 应用程序时,可以使用两种方法。如果您使用过tkinter和ttk,则第一个是熟悉的。第二个使用新的Window类来简化整个过程。

安装 ttkbootstrap: python -m pip install ttkbootstrap

demo

import tkinter as tk
import ttkbootstrap as ttk
from ttkbootstrap.constants import *root = tk.Tk()b1 = ttk.Button(root, text="Button 1", bootstyle=SUCCESS)
b1.pack(side=LEFT, padx=5, pady=10)b2 = ttk.Button(root, text="Button 2", bootstyle=(INFO, OUTLINE))
b2.pack(side=LEFT, padx=5, pady=10)root.mainloop()

demo

默认主题是litera,但您可以通过单独使用Style对象或通过Window类使用任何内置主题来启动应用程序。
root = ttk.Window(themename="darkly")

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • PTA L1-062 幸运彩票
  • One-Class Classification: A Survey
  • 猫头虎分享:Python库 Falcon 的简介、安装、用法详解入门教程
  • 网络通信——OSI七层模型和TCP/IP模型
  • 黑马智数Day5
  • contenteditable=“true“可编辑div字数限制
  • JVM —— 类加载器的分类,双亲委派机制
  • Ubuntu中交叉编译armdillo库
  • PostgreSQL主备环境配置
  • SpringBoot 整合 Easy_Trans 实现翻译的具体介绍
  • 人工智能有助于解决 IT/OT 集成安全挑战
  • 《动手学深度学习》笔记1.9——丢弃法 (一种正则化方法)
  • JVM基本组成
  • 【AI算法岗面试八股面经【超全整理】——深度学习】
  • PLC Twincat3 对传感器数据滑动平均滤波
  • 网络传输文件的问题
  • HTML-表单
  • HTTP 简介
  • javascript数组去重/查找/插入/删除
  • java小心机(3)| 浅析finalize()
  • MQ框架的比较
  • Solarized Scheme
  • SQLServer之创建数据库快照
  • Vue源码解析(二)Vue的双向绑定讲解及实现
  • win10下安装mysql5.7
  • 工作手记之html2canvas使用概述
  • 猫头鹰的深夜翻译:Java 2D Graphics, 简单的仿射变换
  • 前端性能优化——回流与重绘
  • 如何打造100亿SDK累计覆盖量的大数据系统
  • 译有关态射的一切
  • 原生js练习题---第五课
  • postgresql行列转换函数
  • 教程:使用iPhone相机和openCV来完成3D重建(第一部分) ...
  • 说说我为什么看好Spring Cloud Alibaba
  • ​DB-Engines 12月数据库排名: PostgreSQL有望获得「2020年度数据库」荣誉?
  • ​无人机石油管道巡检方案新亮点:灵活准确又高效
  • #includecmath
  • #Linux(权限管理)
  • $().each和$.each的区别
  • (21)起落架/可伸缩相机支架
  • (AngularJS)Angular 控制器之间通信初探
  • (javascript)再说document.body.scrollTop的使用问题
  • (zz)子曾经曰过:先有司,赦小过,举贤才
  • (阿里云万网)-域名注册购买实名流程
  • (二)原生js案例之数码时钟计时
  • (附源码)springboot 个人网页的网站 毕业设计031623
  • (七)c52学习之旅-中断
  • (三维重建学习)已有位姿放入colmap和3D Gaussian Splatting训练
  • (收藏)Git和Repo扫盲——如何取得Android源代码
  • (五)Python 垃圾回收机制
  • (一) springboot详细介绍
  • (一)kafka实战——kafka源码编译启动
  • (一)python发送HTTP 请求的两种方式(get和post )
  • (原創) 如何使用ISO C++讀寫BMP圖檔? (C/C++) (Image Processing)
  • (转)关于pipe()的详细解析