2010-07-01 38 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