每行的python-gtk cellrenderer组合框

时间:2015-06-26 13:52:21

标签: python combobox gtk cellrenderer

我有一排这样的 - > [姓名],[mp3names],[suggested_names] suggested_names是组合框的列表,每行有不同的建议名称。所以我需要一个组合框。但我不知道该怎么做。

编辑:我首先读取了我的csv文件,然后将它们添加到列表中,然后处理所有列。我对每一行都有名称建议,但我不知道如何添加这些建议。现在我只能为所有行定义建议并使用,但这不正确,我需要为每一行提出不同的建议。 enter image description here

            for i in range(self.row_len):
                outliers_list.append([str(self.columns[1][i])]+[str(self.columns[self.col_count-2][i])]+[str(self.columns[self.col_count-1][i])]+[corrected]+[audio_name])

            self.col_len = len(outliers_list[0]);

    #dynamically liststore column adding
            self.liststore = Gtk.ListStore(*([str] * 5))
    # You need to use self.fillStore() instead.
            for item in outliers_list:
                self.liststore.append(item)
            liststore_suggestions = Gtk.ListStore(str)
            suggestions = correct("axse") 
            for item in suggestions:
                liststore_suggestions.append([item])


            renderer_text = Gtk.CellRendererText()
            column = Gtk.TreeViewColumn("Name", renderer_text, text=0)
            treeview.append_column(column)

            renderer_text = Gtk.CellRendererText()
            column = Gtk.TreeViewColumn("mp3Names", renderer_text, text=1)
            treeview.append_column(column)
            renderer_combo = Gtk.CellRendererCombo()
            renderer_combo.set_property("editable", True)
            renderer_combo.set_property("model",liststore_suggestions)
            renderer_combo.set_property("text-column", 0)
            renderer_combo.set_property("has-entry", True)
            renderer_combo.connect("edited", self.on_combo_changed)

            column_combo = Gtk.TreeViewColumn("Suggest", renderer_combo, text=2)
            treeview.append_column(column_combo)

这里建议=正确(“axse”)会改变每一行,我只定义它来显示你,正确的是:

suggestions = correct(str(self.columns[1][i]))

最后,我想要的是更改此代码,因为它只存储一个列表并将其用于每一行。

renderer_combo.set_property("model",liststore_suggestions)

但我想要的是这样的。为每一行动态加载组合框列表库。

renderer_combo.set_property("model",liststore_suggestions[i])

1 个答案:

答案 0 :(得分:0)

最后我找到了自己的方式。 所以一开始我添加了

 select = self.treeview.get_selection()
 select.connect("changed", self.on_tree_selection_changed)

然后我添加了新功能。它获取行的第一列值并进行更正,建议名称并更新组合框。

def on_tree_selection_changed(self, selection):
    model, treeiter = selection.get_selected()

    name = str(model[treeiter][0])
    liststore_suggestions = Gtk.ListStore(str)
    suggestions = correct(name)
    for item in suggestions:
        liststore_suggestions.append([item])
    self.renderer_combo.set_property("model",liststore_suggestions)