Python多Treeview组件的表头背景色设置问题
如何为特定Treeview组件设置单独的表头背景色
你的问题出在全局样式修改上:当你使用objStyle.configure("Treeview.Heading", background="#c3c3c3")时,你修改的是ttk中所有Treeview表头共用的默认样式,所以不管是treeView1还是treeView2的表头都会被这个设置影响。
要实现只为treeView2的表头设置特定背景色,你需要创建一个自定义的样式类,只将其应用到目标Treeview组件上,具体步骤如下:
解决方案步骤
- 创建一个基于默认
Treeview.Heading的自定义样式,比如命名为"CustomTree.Heading"
- 创建一个基于默认
- 将这个自定义样式关联到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
相关产品推荐
相关产品推荐

