如何基于TYPE列值为Pandastable中的行设置对应颜色?
Pandastable按TYPE列设置行颜色实现方案
我是Pandastable新手,想要根据表格中TYPE列的数值为行设置不同颜色:
- W 对应黄色行
- E 对应红色行
- I 对应蓝色行
现有代码如下:
def ElogsOpen (): #function to strip logs and create a csv file elogstrip() # window off root parameters win = Toplevel(root) win.title('Elogs') win.geometry ( '1920x1080') win.state('zoomed') win.resizable=False #File path where CSV was stored when generated filepath= folderbtn+'\elogs.csv' #Code to display Pandastable from CSV class TestApp(tk.Frame): def __init__(self, parent, filepath): super().__init__(parent) self.table = Table(self, showtoolbar=True, showstatusbar=True) self.table.importCSV(filepath) self.table.autoResizeColumns() self.table.show() app = TestApp(win, filepath) app.pack(fill=tk.BOTH, expand=1)
实现步骤
自定义带颜色规则的表格类
重写Pandastable自带的getRowColors方法,这个方法会在每行渲染时被调用,我们可以在这里根据TYPE列的值返回对应颜色。建立TYPE与颜色的映射
用字典存储颜色规则,方便快速匹配,也可以用RGB十六进制值来精准控制颜色深浅。替换原有Table类
在TestApp中使用自定义的表格类替代默认的Table类,让颜色规则生效。
修改后的完整代码
import tkinter as tk from tkinter import Toplevel from pandastable import Table def ElogsOpen (): elogstrip() win = Toplevel(root) win.title('Elogs') win.geometry('1920x1080') win.state('zoomed') win.resizable=False filepath= folderbtn+'\elogs.csv' # 自定义带行颜色规则的表格类 class ColoredTable(Table): def getRowColors(self, row): # 获取当前行TYPE列的值 type_val = self.model.getValueAt(row, self.model.getColIndex('TYPE')) # 颜色映射规则,可替换为RGB值比如'#FFFACD'(浅黄) color_map = { 'W': 'yellow', 'E': 'red', 'I': 'blue' } # 匹配不到时返回默认白色 return color_map.get(type_val, 'white') class TestApp(tk.Frame): def __init__(self, parent, filepath): super().__init__(parent) # 使用自定义表格类 self.table = ColoredTable(self, showtoolbar=True, showstatusbar=True) self.table.importCSV(filepath) self.table.autoResizeColumns() self.table.show() app = TestApp(win, filepath) app.pack(fill=tk.BOTH, expand=1)
注意事项
- 确保CSV中TYPE列的名称和代码里的
'TYPE'完全一致(包括大小写),否则会匹配不到颜色。 - 如果表格数据更新后颜色没同步,可调用
self.table.redraw()方法重新渲染。
内容的提问来源于stack exchange,提问作者HASS
相关产品推荐
相关产品推荐

