【问题标题】:SET Color of Cell of one column based on value of column cell Example pandastable根据列单元格的值设置一列单元格的颜色示例 pandastable
【发布时间】:2020-02-05 13:35:21
【问题描述】:

我有数据框,我正在使用 pandastable 来显示数据 gui,我想在我的 B 列中显示不同的颜色,如果 B 列有“X”作为值,则显示绿色单元格 x,否则如果“Y”值则显示显示红色单元格颜色。

我知道我们可以通过 table.setColorbyValue() 来做,但我没有得到 table.setColorbyValue() 的示例 你能告诉我如何使用 table.setColorbyValue()

import tkinter as tk
import pandas as pd
from pandastable import Table

# --- functions ---

def on_select(val):

    if val == 'all':
        pt.model.df = df
    else:
        pt.model.df = df[ df['TIME'] == val ]

    # refresh/redraw table in window
    pt.redraw()

# --- main ---

df = pd.DataFrame({
    'TIME': ['00:00','00:00','01:00','01:00','02:00','02:00'],
    'A': ['a','b','c','d','e','f'],
    'B': ['x','x','y','y','z','z'],
})

root = tk.Tk()

# create frame for pandas table
table_frame = tk.Frame(root)
table_frame.pack()

# add pandastable do frame
pt = Table(table_frame, dataframe=df) # it can't be `root`, it has to be `frame` 
pt.show()


values = ['all'] + list(df['TIME'].unique())
selected = tk.StringVar()

options = tk.OptionMenu(root, selected, *values, command=on_select)
options.pack()

root.mainloop()

【问题讨论】:

  • my previous answer 中,您有示例如何使用它setRowColors为此 - 它有效。如果您收到错误,请显示您的代码和完整的错误消息。
  • 我试图理解setColorbyValue 的源代码,它似乎只适用于具有整数/浮点值的列,并且需要在使用setColorbyValue() 之前在列表pt.multiplecollist = [...] 中设置这些列.另一个问题是将颜色分配给由函数pt.values_to_colors 生成的值 - 所以你必须覆盖这个函数。一切似乎都太复杂了。

标签: python pandas user-interface tkinter


【解决方案1】:

setColorByValue() 为例,但我认为此功能不会像您期望的那样有用。坦率地说,我不明白为什么这个功能存在。


您必须设置要着色的列并稍后运行setColorbyValue(),但列可能需要整数或浮点值。或者至少它不适用于字符串。

pt.multiplecollist = [0, 2] # column's number
pt.setColorbyValue()       # set colors using `pt.values_to_colors()` 

其他问题:它打开对话框窗口并要求一些颜色。

基于源代码:setColorbyValue


import tkinter as tk
import pandas as pd
from pandastable import Table

df = pd.DataFrame({
    'A': [1,2,3,4,5,6],
    'B': [1,2,3,4,5,6],
    'C': [1,2,3,4,5,6],
})

root = tk.Tk()

table_frame = tk.Frame(root)
table_frame.pack()

pt = Table(table_frame, dataframe=df) # it can't be `root`, it has to be `frame` 
pt.show()

pt.multiplecollist = [0,2] # column's number
pt.setColorbyValue() # set colors using `pt.values_to_colors()` 

root.mainloop()

顺便说一句:更有用的可以是setColorByMask()

mask_1 = pt.model.df['A'] < 5

pt.setColorByMask('A', mask_1, 'red')

mask_2 = pt.model.df['A'] >= 5

pt.setColorByMask('A', mask_2, 'green')

import tkinter as tk
import pandas as pd
from pandastable import Table

df = pd.DataFrame({
    'A': [1,2,3,4,5,6],
    'B': [1,2,3,4,5,6],
    'C': [1,2,3,4,5,6],
})

root = tk.Tk()

table_frame = tk.Frame(root)
table_frame.pack()

pt = Table(table_frame, dataframe=df) # it can't be `root`, it has to be `frame` 
pt.show()

mask_1 = pt.model.df['A'] < 5
pt.setColorByMask('A', mask_1, 'red')
mask_2 = pt.model.df['A'] >= 5
pt.setColorByMask('A', mask_2, 'green')

root.mainloop()

【讨论】:

    猜你喜欢
    • 2013-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-07
    • 2011-07-13
    • 1970-01-01
    相关资源
    最近更新 更多