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)

を作成します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 に答える