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

Python多Treeview组件的表头背景色设置问题

如何为特定Treeview组件设置单独的表头背景色

你的问题出在全局样式修改上:当你使用objStyle.configure("Treeview.Heading", background="#c3c3c3")时,你修改的是ttk中所有Treeview表头共用的默认样式,所以不管是treeView1还是treeView2的表头都会被这个设置影响。

要实现只为treeView2的表头设置特定背景色,你需要创建一个自定义的样式类,只将其应用到目标Treeview组件上,具体步骤如下:

解决方案步骤

    1. 创建一个基于默认Treeview.Heading的自定义样式,比如命名为"CustomTree.Heading"
    1. 将这个自定义样式关联到treeView2的表头,或者直接给treeView2指定自定义的Treeview样式,让它的表头自动使用我们自定义的样式

修正后的完整代码

import tkinter as objTK
from tkinter import ttk as objTTK

# Create window
objWindow = objTK.Tk()

# Initialise variables
arrHdr = ["Hdr1", "Hdr2"]
arrData = ["Test1", "Test2"]

# ------------ Treeview 1(保持默认样式,无需修改)
fFrame1 = objTK.LabelFrame(objWindow, text="Tree 1")
treeView1 = objTTK.Treeview(columns=arrHdr, show="headings")
treeView1.grid(column=0, row=0, sticky="nsew", in_=fFrame1)
fFrame1.grid_columnconfigure(0, weight=1)
fFrame1.grid_rowconfigure(0, weight=1)
treeView1.heading(0, text="Hd1")
treeView1.heading(1, text="Hd2")
treeView1.insert("", "end", values=arrData)
fFrame1.pack(pady=5)

# ------------ Treeview 2(修改部分)
fFrame2 = objTK.LabelFrame(objWindow, text="Tree 2")
# 创建自定义样式
objStyle = objTTK.Style()
objStyle.theme_use("clam")
# 1. 定义自定义的表头样式,继承自默认Treeview.Heading
objStyle.configure("CustomTree.Heading", background="#c3c3c3")
# 2. 定义自定义Treeview样式,指定其表头使用我们的CustomTree.Heading
objStyle.configure("CustomTree.Treeview", headingstyle="CustomTree.Heading")

# 创建treeView2时,指定style参数为我们的自定义样式
treeView2 = objTTK.Treeview(columns=arrHdr, show="headings", style="CustomTree.Treeview")
treeView2.grid(column=0, row=0, sticky="nsew", in_=fFrame2)
fFrame2.grid_columnconfigure(0, weight=1)
fFrame2.grid_rowconfigure(0, weight=1)
treeView2.heading(0, text="Hd1")
treeView2.heading(1, text="Hd2")
treeView2.insert("", "end", values=arrData)
fFrame2.pack(pady=5)

objWindow.bind("<Escape>", lambda wExit: objWindow.destroy())
objWindow.mainloop()

代码说明

  • 我们没有直接修改全局的Treeview.Heading,而是创建了CustomTree.Heading这个专属样式,只对使用CustomTree.Treeview样式的Treeview组件生效
  • 通过style="CustomTree.Treeview"将自定义样式绑定到treeView2上,这样它的表头就会使用我们设置的背景色,而treeView1依然保持默认样式

内容的提问来源于stack exchange,提问作者Sandeep S D

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 12:34:07