如何在pygtk树视图中设置单元格颜色?

6 投票
1 回答
4938 浏览
提问于 2025-04-16 12:50

我有一个用PyGtk做的树形视图,里面有几个列。在程序运行的时候,我不断地添加新的行。每个单元格里都包含一个字符串。通常情况下,我会为每一行使用一个gtk.CellRenderer,但是我想根据单元格里的值来设置每个单元格的背景颜色。

我试过几种方法,但似乎我必须为每个单元格创建一个CellRenderer,然后设置文本属性和背景颜色。这感觉有点麻烦,所以我在想有没有更好的解决办法。有没有什么建议呢?

1 个回答

14

你可以在树形视图的数据源中为每个单元格定义背景和前景颜色。然后,设置树形视图列的前景和背景属性,让它们从相应的数据源字段中获取这些颜色值。

下面是一个简单的例子:

import gtk

test_data = [
    { 'column0' : 'test00', 'column1' : 'test01', 'f': '#000000', 'b': '#FF00FF' },
    { 'column0' : 'test10', 'column1' : 'test11', 'f': '#FF0000', 'b': '#C9C9C9' },
    { 'column0' : 'test20', 'column1' : 'test21', 'f': '#00FF00', 'b': '#FF0000' }]

class TestWindow(gtk.Window):
    def __init__(self):
        gtk.Window.__init__(self)

        # create list storage        
        store = gtk.ListStore(str, str, str, str)
        for i in test_data:
            store.append([i['column0'], i['column1'], i['f'], i['b']])
        treeview = gtk.TreeView(store)

        # define columns
        column0 = gtk.TreeViewColumn("Column 0", gtk.CellRendererText(), text=1, foreground=2, background=3)        
        treeview.append_column(column0)            
        column1 = gtk.TreeViewColumn("Column 1", gtk.CellRendererText(), text=1, foreground=2, background=3)        
        treeview.append_column(column1)

        self.connect("destroy", lambda w: gtk.main_quit())
        self.connect("delete_event", lambda w, e: gtk.main_quit())

        self.add(treeview)
        self.show_all()

if __name__ == "__main__":
    TestWindow()
    gtk.main() 

希望这能帮到你,祝好!

撰写回答