2013-12-11 2 views
1

저는 PyGtk를 사용하여 트리 뷰에 문자열 정보를 표시하고 있습니다. 다음은 내 코드를 간다 :PyGtk의 set_model 메소드가 세 번째 열의 첫 번째 열 값을 복제하는 이유는 무엇입니까?

def create_table(self): 
    self.mainbox = gtk.ScrolledWindow() 
    self.mainbox.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) 
    self.window.add(self.mainbox) 

    model = gtk.ListStore(str, str, str) 
    self.treeview = gtk.TreeView(model=None) 

    col = gtk.TreeViewColumn("Element") 
    self.treeview.append_column(col) 
    cell = gtk.CellRendererText() 
    col.pack_start(cell, expand=False) 
    col.set_attributes(cell, text=0) 

    col = gtk.TreeViewColumn("Test") 
    self.treeview.append_column(col) 
    cell = gtk.CellRendererSpin() 
    col.pack_start(cell, expand=False) 
    col.set_attributes(cell, text=1) 

    col = gtk.TreeViewColumn("Command") 
    self.treeview.append_column(col) 
    cell = gtk.CellRendererSpin() 
    col.pack_start(cell, expand=False) 
    col.set_attributes(cell, text=0) 

    cell = gtk.CellRendererCombo() 
    self.mainbox.add(self.treeview) 
    self.mainbox.set_size_request(500, 260) 
    self.mainbox.show() 
    self.vbox.pack_start(self.mainbox, expand=False, fill=True, padding=0) 

그런 다음, 나는 이벤트 버튼 후 트 리뷰를 채우는 방법을 만들었습니다.

def create_model(self, beats_me_param): 
    model = gtk.ListStore(str, str, str) 

    elements = [] 
    tests = [] 
    commands = [] 

    table_information = self.get_organized_table() 

    for i in table_information: 
     for dicts in i: 
      for element in dicts.keys(): 
       elements.append(element) 

    for i in table_information: 
     for dicts in i: 
      for value in dicts.values(): 
       tests.append(value[0]) 
       commands.append(value[1]) 


    for i in range(len(elements)): 
     model.append([elements[i], tests[i], commands[i]])    

    self.treeview.set_model(model) 

: 호출 :

def populate_treeview_button(self): 
    button = gtk.Button(label='Populate Table') 
    button.connect("clicked", self.create_model) 
    self.vbox.pack_start(button, expand=False, fill=True, padding=0) 

상기 방법은 (키 요소 (문자열) 및 값 2 문자열리스트이고 I는 table_information 특성에 dicts 목록을 수신) 내 treeview에서 결과를 보았다, 나는 세 번째 열에 첫 번째 열의 동일한 가치를 가지고 물론 그들은 다릅니다. table

"추가"순간에 요소의 순서가 변경되고 동일하게 발생하면 값이 변경되지만 변경된 값은 세 번째 열에서 반복됩니다. 무슨 일있어?

답변

1

문제는 세 번째와 첫 번째 열에 동일한 색인을 설정했기 때문입니다.

col = gtk.TreeViewColumn("Command") 
self.treeview.append_column(col) 
cell = gtk.CellRendererSpin() 
col.pack_start(cell, expand=False) 
col.set_attributes(cell, text=2) 

올바른 방법.