5

私がやろうとしているのは、文字列のリストを(フィルターを介して)動的に変更することです。私の場合、パスがに保存されているファイルのリストですgtk.TreeStore

期待される効果の例(例:Sublime Text 2ファイル検索Ctrl+ P):

データ:

ファイルのリスト(ツリービュー):

  • '/ home / user /'
    • '.bashrc'、
    • 'test.txt'、
  • ..。

処置:フィルタ・フィールド(入力ウィジェット)で、ユーザーは入力を開始します。最初の文字の後。't'リストは次のように更新する必要があります。

結果:

ファイルのリスト(ツリービュー):

  • 'test.txt'、
  • ...'t'を含むすべての文字列(マッチング関数は現在重要ではありません)

私がすでに持っているもの:

self.search_entry = gtk.Entry()

self.tree_store = gtk.TreeStore(gobject.TYPE_STRING, gobject.TYPE_BOOLEAN)

for node, files in self.files_list:
    parent = self.tree_store.append(None, [node, True])
    for f in files:
        self.tree_store.append(parent, [f, True])

tree_filter = self.tree_store.filter_new()
self.treeview = gtk.TreeView(tree_filter)

self.renderer0 = gtk.CellRendererText()
self.treeview.insert_column_with_attributes(-1, "Filename", self.renderer0, text=0)
self.treeview.set_search_column(0)
self.treeview.set_search_entry(self.search_entry)
self.treeview.expand_all()

set_search_equal_funcTreeViewには、デフォルトのマッチング関数を自分のものに変更できるメソッドがあることを知っています。問題は、フィルターフォームフィールドに入力するときにリストを変更するにはどうすればよいですか?

4

2 に答える 2

3

gtk.TreeModelFilterについて読む必要があります。ここで、非常に役立つ例を読むことができます。これは C# ですが、Python に「変換」するのは非常に簡単です。

http://www.mono-project.com/GtkSharp_TreeView_Tutorial#Filtering_Data

于 2012-12-28T11:49:17.517 に答える