You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python Tkinter的单个Label中使用多种字体?

在Tkinter单个Label内实现多字体样式

Tkinter原生Label本身不支持同一控件内的多字体样式,但有几个实用方案可以满足你的需求:

方案1:用Text组件模拟带样式的Label

Text组件支持富文本格式,还能设置边框模拟Label外观,无需拆分控件:

import tkinter as tk

root = tk.Tk()

# 创建带边框的Text,模拟Label的外观
rich_text = tk.Text(root, height=3, width=40, bd=2, relief="groove")
rich_text.pack(padx=10, pady=10)

# 插入不同样式的内容:标题设为粗体
rich_text.insert(tk.END, "标题:Python Tkinter 进阶指南\n", "bold")
rich_text.insert(tk.END, "时长:25分钟 - 频道:技术知识库\n")
rich_text.insert(tk.END, "描述:深入讲解Tkinter组件的自定义样式技巧")

# 配置粗体标签的字体样式
rich_text.tag_configure("bold", font=("微软雅黑", 10, "bold"))

# 设为只读,完全模拟Label的交互体验
rich_text.config(state=tk.DISABLED)

root.mainloop()

方案2:用Canvas绘制富文本后作为Label的图像

如果坚持用Label组件,可以先在Canvas上绘制不同字体的内容,再将Canvas作为Label的图像显示:

import tkinter as tk
from tkinter import ttk

root = tk.Tk()

def make_rich_label(parent, content_list):
    # 创建画布绘制富文本
    canvas = tk.Canvas(parent, bd=0, highlightthickness=0)
    canvas.pack()
    
    y_offset = 5
    for text, font_style in content_list:
        # 绘制文本并计算位置
        text_id = canvas.create_text(5, y_offset, text=text, font=font_style, anchor="nw")
        y_offset += canvas.bbox(text_id)[3] - canvas.bbox(text_id)[1] + 2
    
    # 调整画布尺寸适配内容
    canvas.config(width=canvas.bbox("all")[2]+10, height=y_offset+5)
    
    # 创建带边框的Label,绑定画布图像
    label = ttk.Label(parent, image=canvas, bd=2, relief="groove")
    label.image = canvas  # 保留引用避免被回收
    return label

# 定义内容与对应字体
content = [
    ("标题:Python Tkinter 入门", ("微软雅黑", 10, "bold")),
    ("时长:15分钟 - 频道:编程入门", ("微软雅黑", 10)),
    ("描述:从零开始搭建第一个Tkinter应用")
]

rich_label = make_rich_label(root, content)
rich_label.pack(padx=10, pady=10)

root.mainloop()

方案3:拆分Label并统一用Frame包裹边框

如果能接受拆分控件,用一个带边框的Frame作为容器,内部放置三个独立Label,视觉上保持整体边框效果:

import tkinter as tk
from tkinter import ttk

root = tk.Tk()

# 创建带边框的容器Frame,替代单个Label的边框
container = ttk.Frame(root, bd=2, relief="groove")
container.pack(padx=10, pady=10)

# 标题Label(粗体)
title_label = ttk.Label(container, text="标题:Python Tkinter 组件详解", font=("微软雅黑", 10, "bold"))
title_label.pack(anchor="w", padx=5, pady=(5,2))

# 时长频道Label
info_label = ttk.Label(container, text="时长:40分钟 - 频道:开发者学堂")
info_label.pack(anchor="w", padx=5, pady=2)

# 描述Label
desc_label = ttk.Label(container, text="描述:全面讲解Tkinter常用组件的属性与方法")
desc_label.pack(anchor="w", padx=5, pady=(2,5))

root.mainloop()

内容的提问来源于stack exchange,提问作者Willem van Houten

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 07:22:53