7

フィルタリングと並べ替えが可能なツリーモデル(実際にはリストストア)を取得しようとしています。私は次のコードを持っています

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

ここで、self.liststoreおよびは、gladeファイルから取得するself.treeview標準Gtk.ListStoreおよびオブジェクトであり、フィルタリング関数です。Gtk.TreeViewself._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を一方を他方の内部にスタックし、最後の1つをツリービューのモデルとしてフィードすることです。

ただし、このトリックは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ますか?または、ツリービューに表示できるフィルター処理された並べ替え可能なツリーモデルオブジェクトを取得するまったく異なる方法はありますか?

4

1 に答える 1

9
>>> 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_with_label('Foo') を使用することもあります。はい、Gtk.MyWidget(label='Foo') は機能しません。

敬具

于 2012-09-12T01:13:44.377 に答える