
























Label(标签)
显示文本、数字和图像
tk.Label 与 ttk.Labellabel_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 实现动态更新。下面逐段解释:
ttk.Label(root, text="你好,世界!").pack(pady=8)
ttk.Label(主题化标签),外观由当前主题决定,通常为操作系统原生风格。text="你好,世界!" 设置显示的文字。.pack(pady=8) 将标签放入父容器(root),并添加上下各 8 像素的外边距,避免紧贴窗口边缘。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 更灵活但外观不跟随系统主题。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 移到文件顶部会更规范,但这里放在函数内也可以。此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。