2015-03-31 18 views
2

我正在使用帶有「脈衝」進度欄的進度對話框來顯示應用程序正忙於計算。我想在完成後立即顯示一個填充條(收到完成的信號),以表明過程已完成。我已經嘗試了類似問題中給出的所有選項(更改值,設置最小/最大,範圍,processEvents等),但進度條在進程完成時保持爲空。pyQt進度對話框在設置值後保持爲空

下面是一個簡單的工作示例。如果您的機器需要的時間太少或太多,您可以更改運行子程序中的結束編號。

from PyQt4 import QtCore, QtGui 
import sys 

class TestDialog(QtGui.QDialog): 
    def __init__(self,parent=None): 
     super(TestDialog,self).__init__() 
     self.resize(50, 50) 
     self.Button = QtGui.QPushButton(self) 
     self.Button.clicked.connect(self.Run_Something) 
     self.Button.setText("Run") 

    def Run_Something(self): 
     self.progress = QtGui.QProgressDialog("Running","Cancel",0,0,self) 
     self.progress.setWindowTitle('Please wait...') 
     self.progress.setWindowModality(QtCore.Qt.WindowModal) 
     self.progress.canceled.connect(self.progress.close) 
     self.progress.show() 

     self.TT = Test_Thread() 
     self.TT.finished.connect(self.TT_Finished) 
     self.progress.canceled.connect(self.progress.close) 
     self.progress.show() 
     self.TT.start() 

    def TT_Finished(self): 
     self.progress.setLabelText("Analysis finished") 
     self.progress.setRange(0,1) 
     self.progress.setValue(1) 
     self.progress.setCancelButtonText("Close") 
     self.progress.canceled.connect(self.progress.close) 


class Test_Thread(QtCore.QThread): 
    finished = QtCore.pyqtSignal() 

    def __init__(self): 
     QtCore.QThread.__init__(self) 

    def run(self): 
     end = 10**7 
     start = 0   

     while start < end: 
      start += 1 

     self.finished.emit() 
     self.terminate() 

if __name__=='__main__': 
    app = QtGui.QApplication(sys.argv) 
    Test = TestDialog() 
    Test.show() 
    sys.exit(app.exec_()) 

任何幫助表示讚賞。謝謝!

回答

1

首先,第5000個快樂標記爲 「PyQt的」 問題:P

在你的問題。我不知道爲什麼這樣做,但這是一個「解決方法」。

如果在顯示之前將QProgressDialog的值設置爲最大值(儘管在此階段最大值設置爲0),那麼代碼將起作用。

E.g.

self.progress.setValue(1) 
self.progress.show() 

在一個奇怪的轉折,如果你不使用上面的「修復」,而是設置範圍爲0和2之間,那麼你的代碼併成功地將其設置爲50%的結尾線。但是,試圖將其設置爲100%(setValue(2))會導致您觀察到的相同錯誤行爲。

所以,希望這有助於你繼續前進。儘管如此,它仍然讓我感到困惑。我認爲這可能是一個錯誤。

+0

我很高興我選擇了pyqt,而不僅僅是pyqt4:p。這工作,我很滿意。顯然,進度條無法用新範圍更新。我環顧四周,但我找不到更新欄的命令(不重置所有內容)。謝謝你的答案。 – Repiklis 2015-04-01 08:50:18

+0

我不認爲它無法更新範圍。我嘗試了一個類似的例子,範圍最初設置爲(在實例化時)爲0-2。當您更新到最大值(2)時,它仍然無法正確顯示,但在將該值設置爲中間值(1)時成功。這種行爲在PySide中也存在,所以也許這是一個Qt錯誤。 – 2015-04-01 10:58:07

+0

非常感謝,這讓我瘋狂! – answerSeeker 2017-04-30 09:06:50