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

时间:2010-11-17 10:06:03

标签: python qt4 pyqt pyside

我正在使用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项目来清空列表。

我该怎么做?

由于

3 个答案:

答案 0 :(得分:4)

我知道这是already answered,但我遇到了这个问题,想方设法删除所选的项目。

这可以这样做:

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

希望这有助于那里的人!

答案 1 :(得分:2)

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

答案 2 :(得分:0)

实际上,removeItemWidget不能用于此目的。

这是我的解决方案

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

方法takeItem(0)的工作方式类似于Stack中的pop()和takeItem(count() - 1),就像队列中的pop()一样。