GtkTreeView因排序而导致的插入/更新性能损失

GtkTreeView因排序而导致的插入/更新性能损失,gtk,pygtk,bulkinsert,gtktreeview,Gtk,Pygtk,Bulkinsert,Gtktreeview,在GTK树视图中插入许多行(使用PyGTK)或修改许多行时,我会遇到性能问题。问题在于,模型似乎在每次更改(插入/修改)后都会重新使用。这会导致GUI挂起几秒钟。通过注释掉model.set_sort_column_id(某些行索引,gtk.sort_升序)使模型不排序消除了这些问题 因此,我想在插入或修改模型时禁用排序,然后重新启用它。很遗憾,无法使用模型禁用排序。请设置列id(-1,gtk.sort\u升序)。使用冻结/解冻功能也不起作用: treeview.freeze\u child\u

在GTK树视图中插入许多行(使用PyGTK)或修改许多行时,我会遇到性能问题。问题在于,模型似乎在每次更改(插入/修改)后都会重新使用。这会导致GUI挂起几秒钟。通过注释掉
model.set_sort_column_id(某些行索引,gtk.sort_升序)使模型不排序
消除了这些问题

因此,我想在插入或修改模型时禁用排序,然后重新启用它。很遗憾,无法使用
模型禁用排序。请设置列id(-1,gtk.sort\u升序)
。使用冻结/解冻功能也不起作用:

treeview.freeze\u child\u notify()
尝试:
对于模型中的行:
# ... 更改行中的某些内容。。。
最后:
treeview.thaw\u child\u notify()
那么,如何禁用排序?还是有更好的批量插入/修改方法


解决方案

多亏了bobince在回答中提供的信息和链接,我找到了一些备选方案:

1) 虚拟排序

tv.freeze\u child\u notify()
sortSettings=model.get\u sort\u column\u id()

model.set_default_sort_func(lambda*unused:0)#听起来就快到了。有关更多说明,请参阅。特别是,您还应该设置
默认排序顺序
(您现在可以使用
None
以及该示例中的虚拟比较lambda,以获得更好的性能)以确保没有排序,并在操作期间从树视图中删除模型


如果有很多更改,您最好创建和设置一个全新的模型。

谢谢,这非常有用:)请参阅我的问题,了解我根据您提供的信息测试的一些解决方案。