フィルタリングと並べ替えが可能なツリーモデル(実際にはリストストア)を取得しようとしています。私は次のコードを持っています
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.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を一方を他方の内部にスタックし、最後の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
ますか?または、ツリービューに表示できるフィルター処理された並べ替え可能なツリーモデルオブジェクトを取得するまったく異なる方法はありますか?