Python 设置值后,pyQt进度对话框栏仍为空
我正在使用一个带有“脉冲”进度条的进度对话框来显示应用程序正在忙于计算。我希望在完成后(接收到完成的信号)立即显示一个填充条,以指示该过程已完成。我已经尝试过类似问题中给出的所有选项(更改值、设置最小/最大值、范围、processEvents等),但进程完成后进度栏仍然为空 下面是一个简单的工作示例。如果在机器中花费的时间太少或太多,可以在运行子例程中更改结束编号Python 设置值后,pyQt进度对话框栏仍为空,python,pyqt,pyqt4,Python,Pyqt,Pyqt4,我正在使用一个带有“脉冲”进度条的进度对话框来显示应用程序正在忙于计算。我希望在完成后(接收到完成的信号)立即显示一个填充条,以指示该过程已完成。我已经尝试过类似问题中给出的所有选项(更改值、设置最小/最大值、范围、processEvents等),但进程完成后进度栏仍然为空 下面是一个简单的工作示例。如果在机器中花费的时间太少或太多,可以在运行子例程中更改结束编号 from PyQt4 import QtCore, QtGui import sys class TestDialog(QtGui
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_())
从PyQt4导入QtCore,QtGui
导入系统
类TestDialog(QtGui.QDialog):
def uuu init uuu(self,parent=None):
super(TestDialog,self)。\uuuu init\uuuuu()
自我调整大小(50,50)
self.Button=QtGui.QPushButton(self)
self.Button.clicked.connect(self.Run\u某物)
self.Button.setText(“运行”)
def运行(自我):
self.progress=QtGui.QProgressDialog(“正在运行”,“取消”,0,0,self)
self.progress.setWindowTitle('请稍候…')
self.progress.setWindowModal(QtCore.Qt.WindowModal)
self.progress.cancelled.connect(self.progress.close)
self.progress.show()
self.TT=测试线程()
self.TT.finished.connect(self.TT\u finished)
self.progress.cancelled.connect(self.progress.close)
self.progress.show()
self.TT.start()
def TT_完成(自):
self.progress.setLabelText(“分析完成”)
self.progress.setRange(0,1)
self.progress.setValue(1)
self.progress.setCancelButtonText(“关闭”)
self.progress.cancelled.connect(self.progress.close)
类测试线程(QtCore.QThread):
finished=QtCore.pyqtSignal()
定义初始化(自):
QtCore.QThread.\uuuu init\uuuuu(self)
def运行(自):
结束=10**7
开始=0
开始<结束时:
开始+=1
self.finished.emit()
self.terminate()
如果“名称”=“\uuuuuuuu主要”:
app=QtGui.QApplication(sys.argv)
Test=TestDialog()
Test.show()
sys.exit(app.exec_())
感谢您的帮助。谢谢 首先,快乐5000号标记了“pyqt”问题:p 关于你的问题。我不知道它为什么这样做,但这里有一个“变通办法” 如果在显示之前将
QProgressDialog
的值设置为其最大值(尽管在此阶段最大值设置为0),则代码正常工作
例如
奇怪的是,如果您不使用上述“修复”,而是将范围设置为0到2之间,那么您的代码会在线程结束时成功地将其设置为50%。但是,尝试将其设置为100%(setValue(2)
)会导致与您观察到的相同的错误行为
所以,希望这能帮助你继续前进。但我仍然不明白为什么会发生这种事。我想这可能是个bug。我很高兴我选择了pyqt,而不仅仅是pyqt4:p。这是可行的,我对此很满意。显然,进度条无法使用新范围进行更新。我环顾四周,但我找不到更新该条的命令(不重置所有内容)。谢谢你的回答。我不认为它不能更新范围。我尝试了一个类似的示例,其中范围最初设置为0-2(在实例化时)。当您更新到最大值(2)时,它仍然无法正确显示,但当您将该值设置为中间值(1)时,它成功显示。这种行为在PySide中也存在,所以可能是Qt错误。非常感谢,这让我发疯了!
self.progress.setValue(1)
self.progress.show()