【发布时间】:2015-03-31 11:39:27
【问题描述】:
我正在使用带有“脉冲”进度条的进度对话框来显示应用程序正在忙于计算。我想在完成后立即显示一个实心条(收到完成的信号)以指示该过程已完成。我已经尝试了类似问题中给出的所有选项(更改值、设置最小值/最大值、范围、processEvents 等),但是当过程完成时进度条仍然为空。
下面是一个简单的工作示例。如果在您的机器上花费的时间太少或太多,您可以在 run 子例程中更改结束编号。
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_())
感谢任何帮助。谢谢!
【问题讨论】: