如何从QListWidget中移除QListWidgetItem并刷新显示?

2 投票
3 回答
6758 浏览
提问于 2025-04-16 07:12

我正在使用QListWidget来显示一个QListWidgetItem的列表。

这个列表是从一个文件中读取的。当我关闭文件时,我想清空这个列表。

我在我的代码中这样做了:

class QuestionsList(QtGui.QListWidget):
    def __init__(self, parent):
        super(QuestionsList, self).__init__(parent)
        self.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
        self.setEditTriggers(QtGui.QAbstractItemView.NoEditTriggers)
        self.setProperty("showDropIndicator", False)
        self.setAlternatingRowColors(True)

        self.quiz = None

    def loadQuiz(self, quiz):
        self.quiz = quiz

        self.flush()

        if quiz is not None:

            i = 1
            for question in quiz.questions_list:
                self.addItem(QuestionItem(i, question, self))
                i += 1


    def flush(self):
        for item in [self.item(i) for i in xrange(self.count())]:
            print unicode(item.text())
            self.removeItemWidget(item)
            del item

loadQuiz方法可以正常工作,flush方法可以打印出每个项目的文本,但removeItemWidget方法和del item都无法清空列表。

我该怎么做呢?

谢谢!

3 个回答

0

其实,removeItemWidget这个方法并不适合这个用途。

这是我的解决方案:

def flush(self):
    while self.count() > 0:
        self.takeItem(0)

takeItem(0)这个方法的作用就像在栈(Stack)中使用pop(),而takeItem(count()-1)就像在队列(queue)中使用pop()。

5

我知道这个问题已经有人回答过了,但我还是想分享一下我找到的删除选中的项目的方法。

可以这样做:

def removeSelected(self):
    for item in self.selectedItems():
        self.takeItem(self.row(item))

希望这对某些人有帮助!

3

为什么在QListWidget上不能使用clear方法?

撰写回答