我正在尝试获得一个可以过滤和排序的树模型(实际上是一个列表存储)。我有以下一段代码
self.modelfilter = self.liststore.filter_new()
self.modelfilter.set_visible_func(\
self._visible_filter_function)
self.treeview.set_model(self.modelfilter)
whereself.liststore
和是我从 glade 文件中获得self.treeview
的标准Gtk.ListStore
和对象,并且是过滤功能。Gtk.TreeView
self._visible_filter_function
问题是它self.modelfilter
似乎无法排序。当我单击列标题(中的列self.treeview
)对它们进行排序时,我得到
Gtk-CRITICAL **: gtk_tree_sortable_get_sort_column_id: assertion `GTK_IS_TREE_SORTABLE (sortable)' failed
说树模型不可排序。
正如这里所建议的,这个问题在 PyGtk 中似乎是可以克服的。这个想法是将一个 ListStore、一个 TreeModelFilter 和一个 TreeSortFilter 堆叠在一起,并将最后一个作为树视图的模型。
然而,这个技巧似乎不适用于 Python Gtk+3。当我尝试
self.modelfilter = self.liststore.filter_new()
self.modelfilter.set_visible_func(\
self._visible_filter_function)
self.sorted_and_filtered_model = \
Gtk.TreeModelSort(self.modelfilter)
self.treeview.set_model(self.sorted_and_filtered_model)
它抱怨
Gtk.TreeModelSort(self.modelfilter)
TypeError: GObject.__init__() takes exactly 0 arguments (1 given)
现在我试图得到一个Gtk.TreeModelSort
没有参数的实例。但是这个实例没有任何set_model
方法。
我在这里迷路了。
有没有另一种方法来设置模型Gtk.TreeModelSort
?或者是否有一种完全不同的方法来获取可以在树视图中显示的过滤和可排序树模型对象?