下面是一些中断的示例代码: 在
import sys
import time
from PyQt5.QtWidgets import (QApplication, QDialog,
QProgressBar)
class Actions(QDialog):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.progress = QProgressBar(self)
self.progress.setGeometry(0, 0, 300, 25)
self.show()
self.count = 0
while self.count < 100:
self.count += 1
time.sleep(1) # Example external function
self.progress.setValue(self.count)
if __name__ == "__main__":
app = QApplication(sys.argv)
window = Actions()
sys.exit(app.exec_())
运行此操作将导致它冻结并变得无响应,特别是在windows环境中。将time.sleep
函数替换为任何非PyQt5函数将产生相同的结果。在
据我所知,这与函数没有在单独的线程中使用QThread调用有关。我使用this answer作为参考,并提出了一个部分解决方案。在
^{pr2}$这将在后台运行time.sleep
,并保持主窗口的响应性。但是,我不知道如何使用self.progress.setValue
更新值,因为它在External
类中不可访问。在
据我所知,我必须用信号来完成这个任务。大多数文档都是针对PyQt4的,这使得找到解决方案变得更加困难。在
我面临的另一个问题是能够从类Actions
内启动External
线程。在
这个问题的答案也将作为PyQt5的有价值的文档。 提前谢谢。在
下面是一个从类
Actions
内部启动线程并使用按钮的版本: 在必须使用信号来更新值。在
相关问题 更多 >
编程相关推荐