我有一个基于 PyQt 构建的 GUI 程序,GUI 有一个 QtGraphicsView 小部件,其中有一个 GraphicsScene,其中有一个要显示和更新的 Pixmap 项目,例如,我使用以下行来执行此操作
view.scene().items().setPixmap(QPixmap.fromImage(qimage))
Run Code Online (Sandbox Code Playgroud)
每次,我都会修改 qimage 并调用此行来更新图像显示,并且效果很好。后来我想添加一个循环来不断更新图像:
for i in xrange(10):
qimage = .... #make some changes to qimage
view.scene().items().setPixmap(QPixmap.fromImage(qimage))
Run Code Online (Sandbox Code Playgroud)
好吧,图像不会在循环内更新。视口只显示第一个图像(i = 0)和最后一个图像(i = 9),我认为这是因为 GraphicsView 小部件的 ViewportUpate 选项,但在我使用后它仍然不起作用:...setViewportUpdateMode(QGraphicsView.FullViewportUpdate)任何想法?真的很感谢您的帮助!
好吧,我想我发现了这个问题,我必须在循环中再添加一行,QApplication.processEvents()否则循环将占用处理时间并使程序没有机会更新
for i in xrange(10):
qimage = .... #make some changes to qimage
view.scene().items().setPixmap(QPixmap.fromImage(qimage))
QApplication.processEvents()
Run Code Online (Sandbox Code Playgroud)
现在可以了。不管怎样,谢谢大家!