在Python的Gtk + 3A排序和筛选的TreeModel ..?(A sorted and f

2019-07-31 12:49发布

我试图获得可以过滤和排序也TreeModel中(实际上是一个liststore)。 我有下面的代码段

self.modelfilter = self.liststore.filter_new()
self.modelfilter.set_visible_func(\
            self._visible_filter_function)
self.treeview.set_model(self.modelfilter)

其中self.liststoreself.treeview是标准Gtk.ListStoreGtk.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

说的TreeModel不可排序。

这个问题似乎可以克服在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 ? 还是有可显示在一个TreeView得到过滤一个完全不同的方式和排序TreeModel的对象?

Answer 1:

>>> from gi.repository import Gtk
>>> mymodel = Gtk.ListStore()
>>> Gtk.TreeModelSort(model=mymodel)
<TreeModelSort object at 0x1d4d190 (GtkTreeModelSort at 0x1f0d3f0)>

在我看来PyGObject还没有准备好。 它没有可浏览的文档,有些东西还没有,特别是这个instrospected:

  • 有时Gtk.MyWidget(ATTR = FOO)一个小部件的工作,像这样的。
  • 有时与Gtk.MyWidget.new_with_label(“富”),如按钮。 是的,Gtk.MyWidget(标签=“富”)不工作。

亲切的问候



文章来源: A sorted and filtered treemodel in Python Gtk+3..?