惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园 - Franky
T
Threatpost
Scott Helme
Scott Helme
I
Intezer
Cloudbric
Cloudbric
Help Net Security
Help Net Security
Application and Cybersecurity Blog
Application and Cybersecurity Blog
Martin Fowler
Martin Fowler
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
博客园 - 【当耐特】
Google Online Security Blog
Google Online Security Blog
N
News | PayPal Newsroom
L
LINUX DO - 最新话题
罗磊的独立博客
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
GbyAI
GbyAI
月光博客
月光博客
Last Week in AI
Last Week in AI
MyScale Blog
MyScale Blog
A
Arctic Wolf
Y
Y Combinator Blog
S
SegmentFault 最新的问题
F
Full Disclosure
T
Tenable Blog
C
Cybersecurity and Infrastructure Security Agency CISA
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
T
The Exploit Database - CXSecurity.com
L
LangChain Blog
S
Secure Thoughts
Recorded Future
Recorded Future
C
Check Point Blog
Schneier on Security
Schneier on Security
Hugging Face - Blog
Hugging Face - Blog
L
Lohrmann on Cybersecurity
WordPress大学
WordPress大学
K
Kaspersky official blog
The Register - Security
The Register - Security
酷 壳 – CoolShell
酷 壳 – CoolShell
Apple Machine Learning Research
Apple Machine Learning Research
腾讯CDC
Cyberwarzone
Cyberwarzone
P
Palo Alto Networks Blog
Hacker News: Ask HN
Hacker News: Ask HN
The GitHub Blog
The GitHub Blog
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
F
Fortinet All Blogs
T
Threat Research - Cisco Blogs
Cisco Talos Blog
Cisco Talos Blog
Vercel News
Vercel News
博客园 - 叶小钗

博客园 - 箫笛

Tkinter - Button 组件 Tkinter - tk 变量 Tkinter - 事件与绑定 Tkinter - 几何管理器 Tkinter - 核心概念 Tkinter - 快速开始 Tkinter - 介绍 Python 编程 - 条件表达式 Python 编程 - 星号下划线参数释义 shell 编程 - shell 脚本的交互方式 Python insall - macOS 系统安装python的几种方式 Miniconda - Python 环境管理工具 Tkinter - Python GUI 开发 Python 编程 - 下划线命名的区别 Python 编程 - 元类编程 Python 编程 - 多重继承与MRO Python 编程 - 描述符协议 Python 编程 - 类型注解 Python 编程 - 生成器表达式 Python 编程 - 集合 Python 编程 - 装饰器 Python 编程 - 闭包 Python 编程 - 列表推导式 Python 编程 - 函数式编程 Python 编程 - lambda 函数 Python 编程 - 文件操作 Python 编程 - 输入与输出 Python 编程 - 面向对象编程 Python 编程 - 元组(tuple) Python 编程 - 字符串(str) Python 编程 - 字典(dict) Python 编程 - 列表(list) Python 编程 - 数据类型和数据结构 Python 编程 - 语句 Python 编程 - 函数 windows - WSL 的安装与使用 shell编程 - dialog 程序使用指南 FE Team - 如何做好前端代码审查 git 提交的撤销和恢复 React15 - redux-saga 如何在saga中实现轮询接口调用? React15 - React CSS Modules BEM命名实践 React15 - React 15 中 componentWillReceiveProps 为什么会多次调用, 同时componentDidUpdate 也会多次调用? React15 - React15类组件多次执行render方法的原因? React15 - React15应用中代码逻辑复用方案 React15 - React状态同步问题解决 React15 - React 15 中 React.pureComponent 的使用场景 React15 - React 15应用在页面渲染时会多次执行类组件的render 函数的原因 React15 - React 15 中能用 componetDidUpdate 代替 componentWillReceiveProps 吗? React15 - React 15 生命周期函数详解 React15 - 如何在React 15中实现自定义的事件订阅与发送(例如组件间通信) React15 - React15应用中的事件订阅和发送机制 React15 - CSS中的BEM规范 React15 - React CSS Modules BEM命名实践 React15 - 写sass 样式文件,嵌套的结构好,还是扁平的结构好? React15 - sass 中 @mixin 和 @extend 的区别是什么? React15 - React 15 应用 如何使用Css moudules 方式进行模块化开发 React15 - React15应用Sass使用指南 React15 - React 15 应用如何进行性能优化?
Tkinter - Label 组件
箫笛 · 2026-07-17 · via 博客园 - 箫笛

Label(标签)
显示文本、数字和图像


tk.Labelttk.Label

label_demo.py

ttk.Label(root, text="你好,世界!").pack(pady=8)

tk.Label(root,
    text="带样式", font=("Helvetica", 16, "bold"),
    fg="white", bg="navy", padx=12, pady=6).pack(pady=8)

# 使用 textvariable 实现实时时钟
time_var = tk.StringVar()
ttk.Label(root, textvariable=time_var, font=("TkFixedFont", 24)).pack(pady=20)

def tick():
    from datetime import datetime
    time_var.set(datetime.now().strftime("%H:%M:%S"))
    root.after(1000, tick)
tick()

关键选项

选项 说明
text 要显示的字符串
textvariable StringVar —— 实现实时更新
image 要显示的 PhotoImage 图像
compound LEFT/RIGHT/TOP/BOTTOM —— 图像与文字的排列方式
font 字体元组:("字体名称", 大小, "bold italic")
fg / bg 文字/背景颜色(仅限 tk.Label
anchor N/S/E/W/CENTER —— 对齐方式
wraplength 在此像素宽度处自动换行
justify LEFT/RIGHT/CENTER —— 多行文本的对齐
relief / bd 边框样式和宽度

⚠️ 图像引用

始终将 PhotoImage 对象保存为实例属性(例如 self.img = ...label.image = ...)。Python 的垃圾回收会清除未被引用的图像,导致控件显示为空白。

代码释义

这段代码创建了三个标签(Label),并演示了 ttk.Labeltk.Label 的区别、样式定制、以及通过 textvariable 实现动态更新。下面逐段解释:


1. 第一个标签 – 纯文本(ttk 风格)

ttk.Label(root, text="你好,世界!").pack(pady=8)
  • 使用 ttk.Label(主题化标签),外观由当前主题决定,通常为操作系统原生风格。
  • text="你好,世界!" 设置显示的文字。
  • .pack(pady=8) 将标签放入父容器(root),并添加上下各 8 像素的外边距,避免紧贴窗口边缘。

2. 第二个标签 – 自定义样式(tk 原生)

tk.Label(root,
    text="带样式", font=("Helvetica", 16, "bold"),
    fg="white", bg="navy", padx=12, pady=6).pack(pady=8)
  • 这里使用的是 tk.Label(经典原生控件),而不是 ttk,因此可以直接设置颜色、字体等视觉属性。
    • font=("Helvetica", 16, "bold"):字体为 Helvetica,字号 16,加粗。
    • fg="white"(foreground):文字颜色为白色。
    • bg="navy"(background):背景色为深蓝色(navy)。
    • padx=12, pady=6:标签内部左右/上下的内边距(使文字与边框有间距)。
  • 同样 pack(pady=8) 给整个标签外部添加垂直边距。
  • 注意ttk.Label 不支持 fg/bg 等直接样式选项,通常通过主题或样式映射来实现,而 tk.Label 更灵活但外观不跟随系统主题。

3. 第三个标签 – 实时时钟(动态更新)

time_var = tk.StringVar()
ttk.Label(root, textvariable=time_var, font=("TkFixedFont", 24)).pack(pady=20)
  • 创建 tk.StringVar() 变量 time_var,用于存储时间字符串。
  • ttk.Labeltextvariable=time_var 选项将标签的内容与 time_var 绑定——当变量变化时,标签自动更新。
  • font=("TkFixedFont", 24):使用 Tk 内置的等宽字体,字号 24,让时间显示清晰对齐。
  • .pack(pady=20) 增加外部边距。
def tick():
    from datetime import datetime
    time_var.set(datetime.now().strftime("%H:%M:%S"))
    root.after(1000, tick)
tick()
  • 定义 tick() 函数:
    • 获取当前时间,格式化为 "时:分:秒"(24 小时制)。
    • 调用 time_var.set(...) 更新变量,标签随即刷新显示。
    • root.after(1000, tick):告诉 Tkinter 在 1000 毫秒(1 秒)后再次调用 tick 自身,形成无限循环定时更新。
  • 最后执行 tick() 启动第一次调用,时钟开始走动。

整体效果

  • 窗口从上到下依次显示:
    1. “你好,世界!”(普通主题标签)
    2. “带样式”(白字蓝底、加粗大号标签)
    3. 实时更新的数字时钟(等宽字体,每秒刷新)

关键知识点

概念 说明
text vs textvariable text 是静态文字;textvariable 绑定变量,变量变化时标签自动更新。
tk.Label vs ttk.Label tk 原生控件可自由设置颜色等;ttk 主题控件更现代但样式受限,优先推荐 ttk
after() 用于创建定时任务,非阻塞,适合周期性更新界面,不影响事件循环。
StringVar 双向绑定变量,修改 set() 会同步到所有绑定的控件。

注意事项

  • 图片资源需保持引用,但此处未涉及。
  • 如果将 tick()from datetime import datetime 移到文件顶部会更规范,但这里放在函数内也可以。
  • 时钟更新间隔设为 1000ms,精确度足够显示秒变化。