2012-09-20 404 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

有我想通必須有一種方法來強制更新:) –