当我的DeleteButton函数被调用时,我收到错误“元组索引超出范围”。我正在尝试一次从列表中删除多个对象。有人能告诉我我的逻辑有什么问题吗?
def DeleteButton(self,event):
sel = self.task_list.GetSelections()
length = len(sel)
for item in range (0, length):
index = sel[item]
self.task_list.Delete(index)
sel = self.task_list.GetSelections()
length = len(sel)
答案 0 :(得分:1)
您应该使用带有手动递增计数器的while
循环,而不是尝试在for
循环的每次迭代中重置范围的顶部,主要是因为这不起作用。
range(0, length)
创建一个list
,然后由for
循环迭代,并且在循环的持续时间内可以是不可变的,因此尝试重置length
赢了做你认为会做的事。为了更明确地说明问题,这里有一些等效的代码:
i = 5
l = range(0, i) # l now set to list [0, 1, 2, 3, 4]
for v in l:
i = v # this has no effect, as l is already instantiated and separate from i
编辑:
要回复您的评论,这里有一个while
循环,可以解决for
循环问题(虽然不是代码中可能存在的其他问题)。
sel = self.task_list.GetSelections()
i = 0
while i < len(sel):
index = sel[i]
self.task_list.Delete(index)
sel = self.task_list.GetSelections()
i += 1
答案 1 :(得分:1)
从未对wxPython有任何经验,我对此有点天真,但从我从文档中可以看出来的内容,以下内容会不会更有意义?
def DeleteButton(self, event):
for id in self.task_list.GetSelections():
self.task_list.Delete(id)
似乎GetSelections
返回一个列表,如果所选项目的ID,那么为什么你的例子中的额外复杂性?