我正在尝试从Gtk.TreeStore中删除多行:
data_selection = data_treeview.get_selection()
data_model, data_row_list = data_selection.get_selected_rows()
treeiter_list = []
for treepath in data_row_list:
row = data_model[treepath]
treeiter_list.append(data_model.get_iter(row))
for treeiter in treeiter_list:
data_treestore.remove(treeiter)
如果我只选择一行,这是有效的。一旦我选择了多个,我就会收到此错误:
Gtk-CRITICAL **:gtk_list_store_remove:断言'iter_is_valid(iter,list_store)'失败
删除第一行后,树木成为无效吗?
答案 0 :(得分:3)
删除第一行后,树木成为无效吗?
是。如果删除了一行,树路径也会改变。
关键是以相反的顺序删除树路径,因此路径仍然有效。也不要存储iters,改用路径并在循环中调用iter,不需要双循环。
示例的关键部分:
selection = self.view.get_selection()
model, paths = selection.get_selected_rows()
for p in reversed(paths):
itr = model.get_iter(p)
model.remove(itr)
完整示例可在以下网址找到:
https://gist.github.com/carlos-jenkins/c4fedad66169b75424a0
请注意,如果模型不是排序模型,这将起作用。如果是,您需要打电话
convert_iter_to_child_iter
以便删除它。