我有以下代码(其中 store 是一个 gtk.ListStore
,titer 是一个 gtk.TreeIter
。文档说如果没有下一行,iter_next()
将返回 None
,因此在找到时中断。它应该搜索 (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()
不再指向下一个有效元素,而是指向 None。这意味着如果具有正确 int
值的元素位于先前删除的项目之后,则永远找不到。是否有正确的方法来搜索 gtk.ListStore
以删除项目?
最佳答案
我注意到的唯一错误是 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
关于python - 如何在 pyGTK 中搜索 gtk.ListStore 并删除元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3426106/