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删除默认排序函数?
答案 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_func
是None
,那么将没有默认的比较功能。”)。
我最终将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:将不会进行排序