我正在向QListWidget添加一个项目,虽然我可以从QListQidget获取该项目的细节,但新项目永远不会出现在屏幕上。是否可以刷新QListWidget以使其更新以显示更新的内容?
>>>myQListWidget.addItem("Hello")
>>>print self.myQListWidget.item(0).text()
Hello
我在Python中这样做,但如果你有C ++解决方案,我可以轻松转换它。
谢谢!
- 埃林
答案 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()可以用于执行异步刷新,但是它似乎不起作用,或者我错误地使用了它。