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_())
任何幫助表示讚賞。謝謝!
我很高興我選擇了pyqt,而不僅僅是pyqt4:p。這工作,我很滿意。顯然,進度條無法用新範圍更新。我環顧四周,但我找不到更新欄的命令(不重置所有內容)。謝謝你的答案。 – Repiklis 2015-04-01 08:50:18
我不認爲它無法更新範圍。我嘗試了一個類似的例子,範圍最初設置爲(在實例化時)爲0-2。當您更新到最大值(2)時,它仍然無法正確顯示,但在將該值設置爲中間值(1)時成功。這種行爲在PySide中也存在,所以也許這是一個Qt錯誤。 – 2015-04-01 10:58:07
非常感謝,這讓我瘋狂! – answerSeeker 2017-04-30 09:06:50