QListWidget在添加后可以刷新吗?
我正在往一个QListWidget里添加一个项目,虽然我可以从QListWidget中获取到这个项目的具体信息,但新添加的项目就是不显示在屏幕上。有没有办法刷新一下QListWidget,让它更新并显示最新的内容呢?
>>>myQListWidget.addItem("Hello")
>>>print self.myQListWidget.item(0).text()
Hello
我是在用Python做这个,不过如果你有C++的解决方案,我也能很容易地转换过来。
谢谢!
--Erin
3 个回答
0
我看到用户671110在使用PyQt5(5.9.2)时遇到了类似的问题。在我的情况下,参考了这个Qt论坛上的建议后,问题解决了。
我使用了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()来进行异步刷新,但似乎并没有效果,或者我用错了。
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
编辑:去掉了尖括号,这样代码可以直接复制粘贴了。
2
你可以通过调用 update()
或 repaint()
来更新小部件的显示。第二个函数是异步的,会强制小部件立即更新。不过,QListWidget 在插入新内容后应该会自动更新,不需要额外调用其他函数。如果没有自动更新,那可能是因为 Qt 无法处理绘图事件。这种情况下,你需要调用 QCoreApplication::processEvents()
,但我不确定这是不是你的问题。