Tkinter - Label 组件
Label(标签)
显示文本、数字和图像
tk.Label 与 ttk.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.Label 与 tk.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.Label的textvariable=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()启动第一次调用,时钟开始走动。
整体效果
- 窗口从上到下依次显示:
- “你好,世界!”(普通主题标签)
- “带样式”(白字蓝底、加粗大号标签)
- 实时更新的数字时钟(等宽字体,每秒刷新)
关键知识点
| 概念 | 说明 |
|---|---|
text vs textvariable |
text 是静态文字;textvariable 绑定变量,变量变化时标签自动更新。 |
tk.Label vs ttk.Label |
tk 原生控件可自由设置颜色等;ttk 主题控件更现代但样式受限,优先推荐 ttk。 |
after() |
用于创建定时任务,非阻塞,适合周期性更新界面,不影响事件循环。 |
StringVar |
双向绑定变量,修改 set() 会同步到所有绑定的控件。 |
注意事项
- 图片资源需保持引用,但此处未涉及。
- 如果将
tick()中from datetime import datetime移到文件顶部会更规范,但这里放在函数内也可以。 - 时钟更新间隔设为 1000ms,精确度足够显示秒变化。

浙公网安备 33010602011771号