QListWidget在添加后可以刷新吗?

2 投票
3 回答
5894 浏览
提问于 2025-04-17 08:31

我正在往一个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(),但我不确定这是不是你的问题。

撰写回答