Label(标签)是 Tkinter 中最基础的控件之一,用于显示文本或图像。下面详细解析 Label 的用法和属性。

基本用法

import tkinter as tk

root = tk.Tk()
root.title("Label 解析")
root.geometry("400x300")

# 最简单的标签
label1 = tk.Label(root, text="这是一个简单的标签")
label1.pack(pady=10)

root.mainloop()

完整属性解析

import tkinter as tk
from tkinter import PhotoImage

root = tk.Tk()
root.title("Label 完整解析")
root.geometry("500x400")

# 1. 文本相关属性
text_label = tk.Label(
    root,
    text="Hello, Tkinter!",           # 显示的文本
    font=("Arial", 16, "bold"),       # 字体 (字体名, 大小, 样式)
    fg="blue",                        # 文字颜色 (foreground)
    bg="lightyellow",                 # 背景颜色 (background)
    justify="left",                   # 多行文本对齐: left/center/right
    wraplength=200,                   # 自动换行宽度
    underline=0,                      # 下划线字符索引
)
text_label.pack(pady=10)

# 2. 尺寸和边框属性
border_label = tk.Label(
    root,
    text="带边框的标签",
    width=20,                         # 宽度 (字符单位)
    height=3,                         # 高度 (字符单位)
    relief="raised",                  # 边框样式: flat/sunken/raised/groove/ridge
    bd=2,                             # 边框宽度 (borderwidth)
    padx=10,                          # 水平内边距
    pady=5,                           # 垂直内边距
)
border_label.pack(pady=10)

# 3. 鼠标交互属性
interactive_label = tk.Label(
    root,
    text="鼠标悬停试试",
    cursor="hand2",                   # 鼠标指针样式
)
interactive_label.pack(pady=10)

# 绑定鼠标事件
def on_enter(event):
    event.widget.config(bg="lightblue", fg="red")

def on_leave(event):
    event.widget.config(bg="SystemButtonFace", fg="black")

interactive_label.bind("<Enter>", on_enter)
interactive_label.bind("<Leave>", on_leave)

# 4. 带图像的标签
try:
    # 方法1: 使用 PhotoImage (支持 PNG, GIF)
    # image = PhotoImage(file="icon.png")
    # image_label = tk.Label(root, image=image, text="图标标签", compound="top")
    # image_label.pack(pady=10)
    
    # 临时创建一个简单图像
    temp_image = PhotoImage(width=50, height=50)
    # 创建一个红色方块
    for i in range(50):
        for j in range(50):
            temp_image.put("red", (i, j))
    
    image_label = tk.Label(root, image=temp_image, text="图像标签", compound="top")
    image_label.pack(pady=10)
except Exception as e:
    print(f"图像加载失败: {e}")

# 5. 动态更新文本
counter = 0
dynamic_label = tk.Label(
    root, 
    text=f"计数器: {counter}",
    font=("Arial", 14),
    bg="lightgreen"
)
dynamic_label.pack(pady=10)

def update_counter():
    global counter
    counter += 1
    dynamic_label.config(text=f"计数器: {counter}")
    root.after(1000, update_counter)  # 每秒更新一次

update_counter()

# 6. 多行文本标签
multiline_label = tk.Label(
    root,
    text="这是一个多行文本标签\n第二行内容\n第三行内容",
    font=("Arial", 12),
    bg="lightgray",
    justify="center",                 # 多行文本居中
    wraplength=300,                   # 自动换行宽度
)
multiline_label.pack(pady=10)

# 7. 使用不同锚点定位
anchor_frame = tk.Frame(root)
anchor_frame.pack(pady=10)

tk.Label(anchor_frame, text="锚点演示", bg="white").pack()

anchor_label = tk.Label(
    anchor_frame,
    text="NW",
    width=15,
    height=3,
    bg="lightblue",
    bd=1,
    relief="solid",
    anchor="nw"  # 文本锚点: n/nw/ne/s/sw/se/w/e/center
)
anchor_label.pack()

root.mainloop()

文本变量绑定

import tkinter as tk

root = tk.Tk()
root.title("Label 文本变量")
root.geometry("300x200")

# 使用 StringVar 动态更新文本
text_var = tk.StringVar(value="初始文本")

label_with_var = tk.Label(
    root,
    textvariable=text_var,  # 绑定文本变量
    font=("Arial", 14),
    bg="lightyellow"
)
label_with_var.pack(pady=20)

# 更新文本的函数
def update_text():
    import time
    current_time = time.strftime("%Y-%m-%d %H:%M:%S")
    text_var.set(f"当前时间: {current_time}")
    root.after(1000, update_text)  # 每秒更新

def change_text():
    text_var.set("文本已被更改!")

# 按钮用于更改文本
change_btn = tk.Button(root, text="更改文本", command=change_text)
change_btn.pack(pady=10)

start_btn = tk.Button(root, text="开始时钟", command=update_text)
start_btn.pack(pady=10)

root.mainloop()

样式主题应用

import tkinter as tk
from tkinter import ttk

class StyledLabels:
    def __init__(self, root):
        self.root = root
        self.root.title("Label 样式主题")
        self.root.geometry("400x300")
        
        self.create_basic_styles()
        self.create_widgets()
    
    def create_basic_styles(self):
        # 创建样式
        style = ttk.Style()
        
        # 定义不同样式
        style.configure("Title.TLabel", 
                       font=("Arial", 18, "bold"),
                       foreground="darkblue",
                       background="lightcyan")
        
        style.configure("Success.TLabel",
                       font=("Arial", 12),
                       foreground="green")
        
        style.configure("Error.TLabel",
                       font=("Arial", 12),
                       foreground="red")
        
        style.configure("Warning.TLabel",
                       font=("Arial", 12),
                       foreground="orange")
    
    def create_widgets(self):
        # 使用 ttk.Label 和样式
        title_label = ttk.Label(self.root, text="标题标签", style="Title.TLabel")
        title_label.pack(pady=10)
        
        success_label = ttk.Label(self.root, text="成功信息", style="Success.TLabel")
        success_label.pack(pady=5)
        
        error_label = ttk.Label(self.root, text="错误信息", style="Error.TLabel")
        error_label.pack(pady=5)
        
        warning_label = ttk.Label(self.root, text="警告信息", style="Warning.TLabel")
        warning_label.pack(pady=5)
        
        # 普通 tk.Label 与 ttk.Label 对比
        tk_label = tk.Label(self.root, text="普通 tk.Label", 
                           bg="lightyellow", fg="black", font=("Arial", 12))
        tk_label.pack(pady=10)
        
        ttk_label = ttk.Label(self.root, text="ttk.Label", 
                             style="Success.TLabel")
        ttk_label.pack(pady=5)

if __name__ == "__main__":
    root = tk.Tk()
    app = StyledLabels(root)
    root.mainloop()