2009-04-09 78 views
2

我經常編寫Python scipts爲我做轉換任務,每當我寫一個需要我用這個小進度條,而以檢查它我如何當它完成這個進度條接近

import sys 
import time 
from PyQt4 import QtGui 
app = QtGui.QApplication(sys.argv) 
barra = QtGui.QProgressBar() 
barra.show() 
barra.setMinimum(0) 
barra.setMaximum(10) 
for a in range(10): 
    time.sleep(1) 
    barra.setValue(a) 
app.exec_() 

我有2個問題:

我如何讓它自行關閉,當它達到100%

也(它保持打開狀態,如果你點擊X按鈕之前關閉蟒蛇殼你崩潰了。)當它失去並重新獲得焦點時,它會停止p正確的。該過程將繼續完成,但進度條空間全部爲白色。我該如何處理?

回答

4

嘛,因爲你的最大設置爲10,你的進度條不應該達到100%,因爲

for a in range(10): 
    time.sleep(1) 
    barra.setValue(a) 

只會重複多達9

進度條不自動關閉。您必須致電

barra.hide() 

循環後。

至於繪畫問題,很可能是因爲您運行此腳本的任何腳本與進度欄在同一線程中。所以當你切換回去時,繪製事件被父腳本的實際處理所延遲。你可以設置一個定時器來定期調用'barra'上的.update()或.repaint()(建議使用update()over repaint())你希望你的主處理代碼在QThread中運行,在PyQt的代碼也可以,但需要你做一些閱讀:)

的文檔是Qt的,但它適用於PyQt的還有:

https://doc.qt.io/qt-4.8/threads.html