Tkinter - Label 组件

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,精确度足够显示秒变化。
posted @ 2026-07-17 09:24  箫笛  阅读(2)  评论(0)    收藏  举报