GtkTreeModelFilter
- http://python-gtk-3-tutorial.readthedocs.io/en/latest/treeview.html#filtering
- https://developer.gnome.org/gtk3/stable/GtkTreeModelFilter.html
- https://github.com/ktkr3d/gnome-peercast-player
GtkTreeModelFilter を使ってインクリメンタルサーチ的なフィルタを実装してみました。
Glade でGtkTreeModelFilter を定義していますが、サンプル等が見つけられなかったので、我流になっているかもしれません。
Glade での準備
- GtkTreeView のモデルにGtkTreeModelFilter を指定
- GtkTreeModelFilter の子モデルにGtkListStore を指定
- GtkSearchEntry の
changed
シグナルをハンドラとして登録
フィルタの準備
- GtkTreeModelFilter を取得し、フィルタ関数
filter_func
を登録します。liststore_filter = builder.get_object("liststore1_filter")
liststore_filter.set_visible_func(self.filter_func) - 検索文字列がモデルの0列、6列の内容に含まれる場合に表示対象とするフィルタ関数を定義します。
def filter_func(self, model, iter, keyword):
self.keyword = self.searchentry.get_text()
if self.keyword == "":
return True
else:
return self.keyword.lower() in model[iter][0].lower() or self.keyword.lower() in model[iter][6].lower()
シグナルハンドラの処理
- 検索文字列が更新されたら
refilter()
を実行します。def on_searchentry_changed(self, liststore):
self.filter.refilter()
Comment