一个在Python Gtk+3中排序和过滤过的树形模型?

2024-05-29 06:43:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试获取一个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.ListStore和{}对象,我从glade文件中获得,self._visible_filter_function是一个过滤函数。在

问题是self.modelfilter似乎不可排序。当我单击列标题(在self.treeview中的列)对它们进行排序时,我得到

^{pr2}$

说树模型不可排序。在

这个问题在PyGtk中似乎是可以克服的。其思想是将ListStore、TreeModelFilter和TreeSortFilter一个叠在另一个内部,并将最后一个作为treeview的模型提供。在

然而,这个技巧在pythongtk+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的模型?或者,有没有一种完全不同的方法来获取一个经过过滤并可排序的treemodel对象,它可以显示在treeview中?在


Tags: 方法模型selfgtkmodel排序functionfilter
1条回答
网友
1楼 · 发布于 2024-05-29 06:43:43
>>> from gi.repository import Gtk
>>> mymodel = Gtk.ListStore()
>>> Gtk.TreeModelSort(model=mymodel)
<TreeModelSort object at 0x1d4d190 (GtkTreeModelSort at 0x1f0d3f0)>

我认为PyGObject还没有准备好。它没有可浏览的文档,有些东西还没有被观察到,尤其是:

  • 有时小部件可以Gtk.MyWidget(attr=foo),就像这个。在
  • 有时Gtk.MyWidget.new_带_标签('Foo'),像按钮。对,Gtk.MyWidget(label='Foo')不工作。在

谨致问候

相关问题 更多 >

    热门问题