PyGtk如何使用过滤器更改TreeView数据?

sca*_*rab 5 python pygtk filtering gtktreeview

我要做的是动态更改(通过过滤器)字符串列表.在我的例子中,它是存储路径的文件列表gtk.TreeStore.

预期效果的示例(例如,Sublime Text 2文件搜索Ctrl+ P):

数据:

文件列表(treeview):

  • '/ home/user中/'
    • '.bashrc' 中,
    • '的test.txt',
  • ...

操作:在过滤器字段(Entry小部件)中,用户开始键入.在第一个字符后例如.'t'列表应该像这样更新:

结果:

文件列表(treeview):

  • '的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()
Run Code Online (Sandbox Code Playgroud)

我知道TreeView有一个方法set_search_equal_func可以将默认匹配函数更改为我自己的.问题是如何在过滤器表单字段中键入时更改列表?

Cés*_*pia 3

您必须阅读有关gtk.TreeModelFilter 的内容。在这里您可以阅读一个非常有用的示例。它是 C#,但将其“翻译”为 python 非常容易:

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