如何从TreeSortable中删除默认排序函数?

时间:2014-01-05 22:59:05

标签: python c sorting treeview

GtkTreeSortable set_default_func的官方Gtk3 C文档指出,将sort函数设置为Null值将删除默认排序函数,因此一旦定义了sort,树视图就永远不会进入未排序状态:< / p>

  

如果sort_func为NULL,则不会进行默认比较   功能。这意味着一旦模型已经排序,它就无法进行   回到默认状态。

这正是我想用TreeView做的事情。我用set_sort_func定义了自己的排序函数,模型正确排序。

我要做的是解释Python的C指令。

这是我正在使用的python代码片段:

self.artist_manager.model.store.set_default_sort_func(sort_func=None, user_data=None)

其中self.artist_manager.model.store指向我的Gtk.TreeStore上的Gtk.TreeModelSort

即。我在官方文档中解释“sort_func为NULL”与python中的None相同。

但是我收到了这个错误:

File "/home/dad/.local/share/rhythmbox/plugins/coverart_browser/coverart_artistview.py", line 765, in initialise
    self.artist_manager.model.store.set_default_sort_func(None, None)
  File "/usr/lib/python3/dist-packages/gi/overrides/Gtk.py", line 915, in set_default_sort_func
    super(TreeSortable, self).set_default_sort_func(sort_func, user_data)
TypeError: Argument 1 does not allow None as a value

我已经将官方GTK文档检查回3.2版,并且set_default_sort_func的所有说明都没有真正改变。

我还使用了函数has_default_sort_func,这会返回True告诉我我确实有一个默认的排序函数...

因此,对于我的问题 - 我显然错误地将C语言解释为python转换 - 如何通过python删除默认排序函数?

1 个答案:

答案 0 :(得分:1)

7年后,当尝试恢复旧的Python 2.7 PyGTK应用程序时,我遇到了相同的错误消息,并在此处结束。我不知道这在接下来的几年中是否发生了变化,但是我确实找到了解决方案,以防万一其他人到此为止。

我有这个(在pygtk中一直在工作):

model = Gtk.TreeStore(object)
model.set_default_sort_func(None)

即使PyGobject API参考似乎指向suggest it should work,也会引起与您提到的错误相同的错误。 (“ 如果sort_funcNone,那么将没有默认的比较功能。”)。 我最终将set_default_sort_func行替换为:

model.set_sort_column_id(Gtk.TREE_SORTABLE_UNSORTED_SORT_COLUMN_ID, Gtk.SortType.ASCENDING)

现在has_default_sort_func返回False

来自set_sort_column_id(的PyGObject API参考:

可以是常规列ID,也可以是以下特殊值之一 值:

  • Gtk.TREE_SORTABLE_DEFAULT_SORT_COLUMN_ID:如果设置了默认排序功能,则将使用
  • Gtk.TREE_SORTABLE_UNSORTED_SORT_COLUMN_ID:将不会进行排序