添加后可以刷新QListWidget吗?

时间:2011-12-16 19:21:32

标签: python qt pyqt

我正在向QListWidget添加一个项目,虽然我可以从QListQidget获取该项目的细节,但新项目永远不会出现在屏幕上。是否可以刷新QListWidget以使其更新以显示更新的内容?

>>>myQListWidget.addItem("Hello")
>>>print self.myQListWidget.item(0).text()
Hello

我在Python中这样做,但如果你有C ++解决方案,我可以轻松转换它。

谢谢!

- 埃林

3 个答案:

答案 0 :(得分:1)

您可以通过调用update()repaint()来更新窗口小部件的视图,第二个函数是异步的,并强制窗口小部件立即更新。但是QListWidget应该在插入后自动更新而不调用任何额外的函数,如果没有,那么问题可能是Qt无法处理绘制事件。然后你必须打电话给QCoreApplication::processEvents(),但我不确定这是不是你的问题。

答案 1 :(得分:0)

嗯......我没有看到那种行为。

import sys
from PyQt4 import QtCore
from PyQt4 import QtGui
a = QtGui.QApplication(sys.argv)
w = QtGui.QListWidget()
w.setWindowTitle('example')
w.show()
w.addItem("test 1")          # shows up
w.addItem("test 2")          # also shows up

编辑:删除了V形符号,以便可以复制/粘贴代码

答案 2 :(得分:0)

我看到了与PyQt5(5.9.2)的user671110类似的行为。就我而言,使用this qt forum的建议是可行的。

使用jkerian改编的示例代码:

import sys

from PyQt5 import QtWidgets

a = QtWidgets.QApplication(sys.argv)

w = QtWidgets.QListWidget()

w.setWindowTitle('example')

w.show()
w.addItem("test 1")                       # Item 1 does NOT show up
w.repaint()                               # Item 1 does NOT show up
QtCore.QCoreApplication.processEvents()
   # Item 1 DOES show up

w.addItem("test 2")       
                # Item 2 does NOT show up
QtCore.QCoreApplication.processEvents()
   # Item 2 DOES show up

w.addItem("test 3")       
                # Item 3 does NOT show up
a.exec_()                                 # All items shows up

这是可以预期的,因为通过事件处理刷新了GUI。仍然有文档提到repaint()可以用于执行异步刷新,但是它似乎不起作用,或者我错误地使用了它。