Как искать в gtk.ListStore в pyGTK и удалять элементы? - PullRequest
3 голосов
/ 06 августа 2010

У меня есть следующий код (где store - gtk.ListStore, а титр - gtk.TreeIter. В документах говорится, что если следующей строки нет, iter_next() вернет None, следовательно, перерыв при этом найдено. Предполагается выполнить поиск по ListStore из (int, str) и удалить один элемент, чей компонент int соответствует item_id.

    while True:
        if store.get_path(titer)[0] == item_id:
            store.remove(titer)
            break
        else:
            titer = store.iter_next(titer)
            if titer is None:
                break

Однако, если элемент в середине был ранее удален, вместо titer.iter_next(), указывающего на следующий действительный элемент, он указывает на Нет. Это означает, что если элемент с правильным значением int находится после ранее удаленного элемента, он никогда не будет найден. Есть ли правильный способ поиска с помощью gtk.ListStore для удаления элементов?

1 Ответ

10 голосов
/ 08 августа 2010

Единственная ошибка, которую я заметил, это store.get_path(titer)[0], которая просто получит номер строки модели списка.Это должно быть store.get_value(titer, 0).

Кстати, ваш код можно выразить в более простом стиле, используя (только PyGTK) TreeModelRow :

for row in store:
    if row[0] == item_id:
        store.remove(row.iter)
        break
...