Python如何修改ttk Treeview组件中指定单元格的颜色
ttk.Treeview指定单元格自定义颜色实现方案
ttk.Treeview本身支持通过tag(标签)机制实现单元格/行的自定义样式配置,你只需要对原有代码的show_table函数做少量修改即可实现需求,具体操作如下:
实现步骤
- 定义样式标签:插入数据前先通过
tag_configure方法创建自定义样式标签,配置背景色、字体颜色等参数 - 给指定单元格绑定标签:插入每行数据时拿到该行的唯一id,通过
tag_add方法给目标单元格绑定提前定义好的样式标签即可
修改后完整可运行代码
import tkinter as tk from tkinter import * from tkinter import ttk def show_table(): text = "".join([letter for letter in textDate.get() if letter != '/']) print(text) number_array = [[1, 4, 7], [2, 5, 8], [3, 6, 9]] frn = Frame(root) frn.place(x=15, y=140) tv = ttk.Treeview(frn, columns=(1, 2, 3), show="headings", height="5") tv.pack() # 自定义样式标签,可按需创建多个不同样式 tv.tag_configure('red_bg', background='red', foreground='white') # 红底白字 tv.tag_configure('bold_yellow', foreground='yellow', font=('微软雅黑', 10, 'bold')) # 黄色粗体 tv.tag_configure('light_blue', background='#CCEEFF') # 浅蓝背景 for row_idx, row_data in enumerate(number_array): # 插入行时拿到该行的唯一id row_iid = tv.insert('', 'end', values=row_data) # 示例:第一行(索引0)第二列(列id为2)设为红底白字 if row_idx == 0: tv.tag_add('red_bg', row_iid, column=2) # 示例:第三行(索引2)第三列(列id为3)设为黄色粗体 if row_idx == 2: tv.tag_add('bold_yellow', row_iid, column=3) # 示例:所有行的第一列都设为浅蓝背景 tv.tag_add('light_blue', row_iid, column=1) def save_data(): date = textDate.get() show_table() root = tk.Tk() canvas = tk.Canvas(root, height=700, width=700, bg="#A2A2A2") root.title("test") canvas.pack() datelable = tk.Label(text="date", bg="#A2A2A2") datelable.place(x=15, y=50) textDate = tk.StringVar() textEntry = tk.Entry(textvariable=textDate) textEntry.place(x=15, y=70, width=100, height=15) finishButton = tk.Button(root, text="send", width="10", height="1", bg="#FFFFFF", command=save_data) finishButton.place(x=15, y=100) frame = tk.Frame(root) root.mainloop()
自定义调整说明
- 你可以根据自己的业务规则设置
tag_add的触发条件,比如单元格数值大于5时加红底标签、等于指定值时加特殊样式标签等 - 样式标签支持的配置参数除了
background(背景色)、foreground(字体色)、font(字体)外,还可以设置borderwidth(边框宽度)、relief(边框样式)等属性 - 如果不给
tag_add方法传column参数,样式会默认应用到整行
内容的提问来源于stack exchange,提问作者roee
相关产品推荐
相关产品推荐

