0

调用 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)
4

2 回答 2

1

您应该使用while带有手动递增计数器的循环,而不是尝试在for循环的每次迭代中重置范围的顶部,主要是因为这不起作用。

range(0, length)

创建 a 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
于 2013-02-20T19:00:44.743 回答
1

从未有过使用 wxPython 的经验,我对此有点天真,但是从我从文档中可以看出,以下内容不是更有意义吗?

def DeleteButton(self, event):
    for id in self.task_list.GetSelections():
        self.task_list.Delete(id)

如果所选项目的 id似乎GetSelections返回一个列表,那么为什么在您的示例中会增加额外的复杂性?

于 2013-02-20T19:36:15.790 回答