Удалить все элементы из QListWidget в цикле - PullRequest
1 голос
/ 06 марта 2020

У меня есть следующий код, который должен удалить все элементы из QListWidget, но он удаляет только один элемент за один клик (не все). Почему? Как это правильно? Я не хочу использовать clear() метод. Я хочу удалить их постепенно.

def onRemoveItems(self): # button click event
   for i in range(self.myListWidget2.count()):
       itemI = self.myListWidget2.item(i)
       self.myListWidget2.takeItem(self.myListWidget2.row(itemI))

1 Ответ

1 голос
/ 06 марта 2020

Концепция аналогична удалению элементов из списка: если вы используете увеличивающиеся индексы и удаляете элементы одновременно, будет удалена только половина элементов.

Если вы начинаете с 0 и удалите строку 0, тогда второй элемент станет первым. Поскольку в следующем цикле вы попытаетесь удалить строку 1, в результате вы удалите то, что раньше было третьей строкой.

Итак, вы всегда можете удалить элемент в строке 0:

    def onRemoveItems(self):
        for i in range(self.myListWidget2.count()):
            itemI = self.myListWidget2.<b>item(0)</b>
            self.myListWidget2.takeItem(self.myListWidget2.row(itemI))

Или используйте обратный диапазон:

    def onRemoveItems(self): # button click event
        for i in range<b>(self.myListWidget2.count() - 1, -1, -1)</b>:
            itemI = self.myListWidget2.item(i)
            self.myListWidget2.takeItem(self.myListWidget2.row(itemI))
...