2012-09-20 402 views
1

内更新我已经建立在PyQt的GUI程序,该GUI具有QtGraphicsView小部件,它有一个GraphicsScene,其中有一个图片项目进行显示和更新,比如,我用下面的line to do thisPyQt的QtGraphicsView没有得到循环

view.scene().items().setPixmap(QPixmap.fromImage(qimage)) 

每次,我修改qimage并调用这一行来更新图像显示,并且它运行良好。 后来我想添加一个循环,不断更新的图像:

for i in xrange(10): 
    qimage = .... #make some changes to qimage 
    view.scene().items().setPixmap(QPixmap.fromImage(qimage)) 

好,图像不会得到循环内更新。视口中只显示第一个图像(I = 0)和最后一个图像(I = 9),我认为这是因为GraphicsView widget的ViewportUpate选项,但它仍然之后,我用不工作:setViewportUpdateMode(QGraphicsView.FullViewportUpdate) ... 任何想法? 真的非常感谢您的帮助!

+0

它可能是因为它发出了一个通知事件的东西改变了......但是它没有机会,因为你是在一个循环......也许看看使用Timer类调用代码,而不是来处理更新事件循环的... –

+0

也许尝试加入'view.scene()。更新()' –

+0

@JoranBeasley我尝试添加'time.sleep(1)'setPixmap后,但仍然没有更新,我也试着加上' view.scene()。更新()',但仍然没有更新... – shelper

回答

3

嗯,我想我找到了问题 我要一个多行QApplication.processEvents()添加到循环 否则循环将占用的处理时间,并给出该程序没有机会来更新

for i in xrange(10): 
    qimage = .... #make some changes to qimage 
    view.scene().items().setPixmap(QPixmap.fromImage(qimage)) 
    QApplication.processEvents() 

现在作品。无论如何,感谢所有人!

+0

有我想通必须有一种方法来强制更新:) –