【问题标题】:Removing multiple rows from a Gtk TreeStore从 Gtk TreeStore 中删除多行
【发布时间】:2015-01-13 19:08:38
【问题描述】:

我正在尝试从 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)' 失败

删除第一行后treeiters是否失效?

【问题讨论】:

    标签: treeview gtk3 pygobject


    【解决方案1】:

    删除第一行后treeiters是否失效?

    是的。如果删除一行,树路径也会发生变化。

    关键是将树路径以相反的顺序删除,使路径保持有效。也不要存储迭代器,而是使用路径并在循环内调用迭代器,不需要双循环。

    例子的关键部分:

    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 删除它。

    https://developer.gnome.org/gtk3/3.14/GtkTreeModelSort.html#gtk-tree-model-sort-convert-iter-to-child-iter

    【讨论】:

      猜你喜欢
      • 2015-07-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-10
      • 2017-03-04
      • 1970-01-01
      相关资源
      最近更新 更多