2010-07-01 57 views
0

我有GTK.Treeview组件的GUI应用程序。它的模型设置为gtk.Treestore,我填充了一个分层结构。一切工作正常 - 树视图是我所期望的。递归地过滤treeview内容

现在我想过滤叶节点只包含给定的字符串。我试图建立这样的模型过滤器:

self.modelfilter = treestore.filter_new() 
self.modelfilter.set_visible_func(self.visible_cb, self.txt) 

,并定义像下面的一个过滤功能(self.txt的是我过滤文本):

def visible_cb(self, model, iter, data): 
    return self.txt.lower() in model.get_value(iter, 0).lower() 

不幸的是这种方法是不是一个好一个是因为过滤是在全部节点上完成的,而不仅仅是叶子。

GTK中有这个问题的优雅解决方案吗?

回答

1

我从来没有使用过这个工具包,但是在浏览api文档之后......不会做以下工作吗?

def visible_cb(self, model, iter, data): 
    return model.iter_has_child(iter) or data.lower() in model.get_value(iter, 0).lower() 

不知道为什么你传递self.txt到set_visible_func并没有使用相应的data参数visible_cb

+0

你是对的,self.txt不应该传递给这个回调。 但是,您发现的东西 - 即 * model.iter_has_child(iter)* 可能会有用。我会试试这个。 – 2010-07-01 09:31:53

+0

这实际上工作得很好,现在我必须弄清楚如何只有可见节点的节点。你能指点我的文档页面,你已经找到了代码片段吗? – 2010-07-01 09:54:29

+0

谷歌“gtk set_visible_func”带我到http://www.pygtk.org/docs/pygtk/class-gtktreemodelfilter--set-visible-func,然后点击文档看着在'visible_cb','gtk.TreeModel'和'gtk.TreeIter'输入参数中可用的方法。我根据你制作的片段。 – MattH 2010-07-01 10:02:08