Как установить цвет отдельной ячейки в виде дерева pygtk? - PullRequest
4 голосов
/ 02 марта 2011

У меня есть дерево PyGtk с парой столбцов. Во время выполнения я постоянно добавляю новые строки. Каждая ячейка содержит строку. Обычно я бы использовал gtk.CellRenderer для каждой строки, но я хочу установить цвет фона каждой ячейки в соответствии со значением внутри ячейки.

Я попробовал пару решений, но, похоже, мне нужно создать CellRenderer для каждой ячейки, установить атрибут текста и цвет фона. Это кажется немного большим, поэтому я спросил себя, есть ли более хорошее решение для этой проблемы. Есть предложения?

1 Ответ

9 голосов
/ 03 марта 2011

Вы можете определить фон и передний план для ваших ячеек древовидной структуры в дополнительных полях источника данных древовидной структуры. Затем настройте атрибуты переднего плана и фона для столбцов древовидной структуры, чтобы получить их значения из соответствующих полей источника данных.

Ниже приведен небольшой пример:

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

надеюсь, это поможет, с уважением

...