我有以下代码(其中商店为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
以删除项目?
答案 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)