Рекурсивная фильтрация дерева - PullRequest
0 голосов
/ 01 июля 2010

У меня есть приложение с графическим интерфейсом с компонентом gtk.Treeview.Его модель установлена ​​в gtk.Treestore, которую я заполняю иерархической структурой.Все работает нормально - вид дерева - это то, что я ожидаю.

Теперь я бы хотел отфильтровать листовые узлы, чтобы они содержали только данную строку.Я попытался создать фильтр модели следующим образом:

 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 Ответ

1 голос
/ 01 июля 2010

Я никогда не использовал этот инструментарий, но после просмотра 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...