如何在pyGTK中搜索gtk.ListStore并删除元素?

时间:2010-08-06 17:16:53

标签: python gtk pygtk

我有以下代码(其中商店为gtk.ListStore且商标为gtk.TreeIter。文档说如果没有下一行,iter_next()将返回None找到它时会中断。它应该搜索ListStore的{​​{1}}并删除其(int, str)组件与item_id匹配的项目。

int

但是,如果中间的元素先前已被删除,而不是 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 指向下一个有效元素,则它指向None。这意味着如果具有正确titer.iter_next()值的元素位于先前删除的项目之后,则永远不会找到它。是否有正确的方法来搜索int以删除项目?

2 个答案:

答案 0 :(得分:10)

我注意到的唯一错误是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

答案 1 :(得分:0)

健全性检查:在尝试搜索列表存储时,请确保其中有数据

    column_number = 0
    search_term = 'foo'
    iter_child = tree_model.get_iter_first()
    tree_path = None
    while iter_child:
        if (tree_model.get_value(iter_child, column_number) == search_term):
            tree_path = tree_model.get_path(iter_child)
        iter_child = tree_model.iter_next(iter_child)

    view.row_activated(tree_path, column_number)
    view.set_cursor(tree_path, column_number, True)