2011-03-02 8 views
4

나는 몇개의 열이있는 PyGtk treeview를 가지고있다. 런타임 동안 나는 항상 새로운 행을 추가합니다. 각 셀에는 문자열이 들어 있습니다. 일반적으로 각 행에 gtk.CellRenderer을 사용 하겠지만 셀 안의 값에 따라 각 셀의 배경색을 설정하고 싶습니다.pygtk 트 리뷰에서 단일 셀의 색상을 설정하는 방법은 무엇입니까?

두 가지 해결책을 시도했지만 각각의 셀에 대해 CellRenderer을 만들고 텍스트 특성과 배경색을 설정해야합니다. 이것은 약간 큰 것처럼 보입니다. 그래서 문제에 대한 더 좋은 해결책이 있는지 스스로에게 물었습니다. 어떤 제안?

답변

9

트리 뷰 데이터 소스의 추가 필드에서 트리 뷰 셀의 배경 및 전경을 정의 할 수 있습니다. 그런 다음 트리 뷰 열의 전경 및 배경 속성을 설정하여 해당 데이터 소스 필드에서 해당 값을 가져옵니다. 이 도움이

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

+0

+1 많은 도움이된다. 감사합니다. – Sardathrion

관련 문제