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()
















