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

news/2024/9/24 4:12:06/

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


http://www.ppmy.cn/news/1529639.html

相关文章

html+css+js网页设计 旅游 穷游10个页面

htmlcssjs网页设计 旅游 穷游10个页面 网页作品代码简单,可使用任意HTML辑软件(如:Dreamweaver、HBuilder、Vscode 、Sublime 、Webstorm、Text 、Notepad 等任意html编辑软件进行运行及修改编辑等操作)。 获取源码 1&#xff…

基于PHP的电脑线上销售系统

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于phpMySQL的电脑线上销售系…

k8s中pod的创建过程和阶段状态

管理k8s集群 kubectl k8s中有两种用户 一种是登录的 一种是/sbin/nologin linux可以用密码登录,也可以用证书登录 k8s只能用证书登录 谁拿到这个证书,谁就可以管理集群 在k8s中,所有节点都被网络组件calico设置了路由和通信 所以pod的ip是可以…

itextsharp报错 PdfReader not opened with owner password

itextsharp报错 PdfReader not opened with owner password itextsharp读取PDF时报错: PdfReader not opened with owner password 报错原因(据说是):pdf 文件设置了加密。 网上搜索了一下,查到大多数答案是: 在创建pdfReader…

智能家政保洁|基于java和vue的智能家政保洁预约系统(源码+数据库+文档)

智能家政保洁预约系统 目录 基于java和vue的智能家政保洁预约系统 一、前言 二、系统设计 三、系统功能设计 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取: 博主介绍:✌️大厂码农|毕设布道师&#xf…

编程新纪元:AI辅助编程工具如何重塑程序员的未来

编程新纪元:AI辅助编程工具如何重塑程序员的未来 本文旨在探讨AI如何赋能编程效率提升,并提供实际案例和可落地的工具或解决方案,以帮助程序员应对AI时代的挑战。 1. AI辅助编程工具:效率的倍增器 AI辅助编程工具,如…

感知笔记4:YOLO 3D 物体定位

如何在 ROS 中使用 YOLO 如何在 2D 中检测人和大象如何在 3D 中检测人和大象 有许多可用的深度学习库。您可能听说过:Keras、TensorFlow 和 Darknet。 在这里我们将使用 Darknet,因为它实现了 YOLOv3,这是一个对象检测模型。它非常快&…

基于Springboot的助学金管理系统设计与实现

文未可获取一份本项目的java源码和数据库参考。 一、研究背景 利用计算机来实现助学金管理系统,已经成为一种趋势,相比传统的手工管理方式,利用软件进行助学金管理系统,有着执行快,可行性高、容量存储大,…