2011-03-02 66 views
4

我有一个PyGtk树视图与几列。在运行期间,我不断添加新行。每个单元包含一个字符串。通常,我会为每行使用gtk.CellRenderer,但我想根据单元格内的值设置每个单元的背景颜色。如何在pygtk树视图中设置单个单元格的颜色?

我尝试了几个解决方案,但似乎我必须为每个单元创建一个CellRenderer,设置文本属性和背景颜色。这看起来有点过大,所以我问自己是否有更好的解决方案。有什么建议么?

回答

9

您可以在treeview数据源的额外字段中定义树视图单元格的背景和前景。然后为树视图列设置前景和背景属性,以从相应的数据源字段获取它们的值。

下面是一个小例子:

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() 

希望这会有所帮助,至于

+0

的感谢!我希望有一个解决方案将数据从控制数据中完全分离出来,但究竟是什么......这足够好用 – Fookatchu 2011-03-04 17:11:10

+0

+1它确实有很大的帮助。谢谢。 – Sardathrion 2011-12-09 15:03:03

相关问题