为什么PyGtk中的set_model方法复制第三列第一列的值?

时间:2013-12-11 19:23:38

标签: python user-interface interface treeview pygtk

我使用PyGtk在树视图中显示一些字符串信息。 这是我的代码:

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

方法(我在table_information属性中接收一个dicts列表,其中键是一个元素(字符串),值是一个包含2个字符串的列表):

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)

当我在树视图中看到结果时,我在第三列获得了与第一列相同的值,当然它们是不同的。图像吼叫: table

我改变了"追加"中元素的顺序。如果出现相同的时刻,则值会发生变化,但在第三列会重复更改的值。出了什么问题?

1 个答案:

答案 0 :(得分: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)

正确的方式。