python-每行的 gtk cellrenderer 组合框
python-gtk cellrenderer combobox for each row
我有这样一行 -> [name],[mp3names],[suggested_names]
suggested_names 是组合框的列表,每一行都有不同的建议名称。所以我需要一个组合框。但是我不知道怎么办。
编辑:我首先阅读我的 csv 文件,然后我将它们全部添加到一个列表中,然后我处理所有列。我对每一行都有名称建议,但我不知道如何添加这些建议。现在我只能一次定义建议并用于所有行,但这是不正确的,我需要为每一行提供不同的建议。
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)
这里的 suggestions = correct("axse") 每一行都会改变,我定义它只是为了给你看,正确的是:
suggestions = correct(str(self.columns[1][i]))
最后,我想要的是更改这段代码,因为它只存储一个列表并用于每一行。
renderer_combo.set_property("model",liststore_suggestions)
但我想要的是类似的东西。为每一行动态加载组合框列表存储。
renderer_combo.set_property("model",liststore_suggestions[i])
我终于找到了自己的出路。
所以一开始我加了
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)
我有这样一行 -> [name],[mp3names],[suggested_names] suggested_names 是组合框的列表,每一行都有不同的建议名称。所以我需要一个组合框。但是我不知道怎么办。
编辑:我首先阅读我的 csv 文件,然后我将它们全部添加到一个列表中,然后我处理所有列。我对每一行都有名称建议,但我不知道如何添加这些建议。现在我只能一次定义建议并用于所有行,但这是不正确的,我需要为每一行提供不同的建议。
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)
这里的 suggestions = correct("axse") 每一行都会改变,我定义它只是为了给你看,正确的是:
suggestions = correct(str(self.columns[1][i]))
最后,我想要的是更改这段代码,因为它只存储一个列表并用于每一行。
renderer_combo.set_property("model",liststore_suggestions)
但我想要的是类似的东西。为每一行动态加载组合框列表存储。
renderer_combo.set_property("model",liststore_suggestions[i])
我终于找到了自己的出路。 所以一开始我加了
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)