如何更新 QListWidget

Posted

技术标签:

【中文标题】如何更新 QListWidget【英文标题】:How to update QListWidget 【发布时间】:2015-02-16 07:33:35 【问题描述】:

如何更新 QLIstWidget 以显示添加时的项目。

就像我在循环中向 QListWidget 添加 100 个 QListWidgetItems。所有这 100 个项目只有在循环完成后才可见。但我想知道是否可以在添加项目时显示项目。

我尝试了self.ListWidget.setUpdatesEnabled(True),但没有成功。

感谢任何帮助。

【问题讨论】:

【参考方案1】:

您可以在循环中重新绘制列表小部件:

def insertItem(self):
    for i in range(1,100):
        self.listWidget.addItem(str(i))
        self.listWidget.repaint()

使用 QTimer,您可以控制 2 个项目之间的延迟。

编辑:也许我没有正确理解您的问题: 您可以添加所有项目,隐藏它们,然后逐项设置它们可见:

import sys 
from PyQt5 import QtGui, QtCore, QtWidgets

class MyWidget(QtWidgets.QWidget): 
    def __init__(self): 
        QtWidgets.QWidget.__init__(self) 
        self.setGeometry(200,100,600,900)
        self.listWidget = QtWidgets.QListWidget(self)
        self.listWidget.setGeometry(20,20,100,700)
        self.pushButton = QtWidgets.QPushButton(self)
        self.pushButton.setGeometry(20,800,100,30)
        self.pushButton.setText('show Items')
        self.pushButton.clicked.connect(self.showItems)
        self.timer = QtCore.QTimer()
        for i in range(0,100):
            self.listWidget.addItem(str(i))
            self.listWidget.item(i).setHidden(True)
        self.z = 0

    def showItems(self):
        self.timer.start(100)
        self.timer.timeout.connect(self.nextItem)    

    def nextItem(self):
        try:
            self.listWidget.item(self.z).setHidden(False)
            self.listWidget.repaint() 
            self.z += 1
        except AttributeError:
            self.timer.stop()
            self.z = 0

app = QtWidgets.QApplication(sys.argv) 
widget = MyWidget()
widget.show()
sys.exit(app.exec_())

在 pyqt4 中,将“QtWidgets”替换为“QtGui”

【讨论】:

感谢解决方案...使用 self.listWidget.repaint() 解决了我的问题。非常感谢。

以上是关于如何更新 QListWidget的主要内容,如果未能解决你的问题,请参考以下文章

mysql如何让时间属性不自动更新

如何关闭MyEclipse自动更新

如何取消WORD中的自动更新时间

mysql如何让时间属性不自动更新

为啥批量插入/更新更快?批量更新如何工作?

更新视图时如何更新表?