pyqt多线程同时执行
时间: 2023-06-28 07:12:55 浏览: 149
使用PyQt编写多线程应用程序需要使用QtCore.QThread类。下面是一个简单的例子,演示如何在PyQt中创建多线程应用程序:
```python
from PyQt5.QtCore import QThread, pyqtSignal
import time
class Worker(QThread):
finished = pyqtSignal()
progress = pyqtSignal(int)
def __init__(self):
super().__init__()
def run(self):
for i in range(1, 101):
self.progress.emit(i)
time.sleep(0.1)
self.finished.emit()
class MainWindow(QtWidgets.QMainWindow):
def __init__(self):
super().__init__()
self.worker = Worker()
self.worker.finished.connect(self.on_finished)
self.worker.progress.connect(self.on_progress)
self.progressBar = QtWidgets.QProgressBar()
self.setCentralWidget(self.progressBar)
self.setGeometry(300, 300, 300, 50)
self.setWindowTitle('PyQt5 ProgressBar')
self.show()
self.worker.start()
def on_progress(self, i):
self.progressBar.setValue(i)
def on_finished(self):
QtWidgets.QMessageBox.information(self, 'Done!', 'Task completed!')
if __name__ == '__main__':
app = QtWidgets.QApplication([])
window = MainWindow()
app.exec_()
```
在这个例子中,我们创建了一个名为Worker的自定义QThread类,并定义了两个信号:finished和progress。finished信号在run方法完成后发射,progress信号在run方法中发射,用于更新进度条。
MainWindow类是我们的主窗口类。在构造函数中,我们创建了一个Worker对象,并连接了它的finished和progress信号。然后,我们创建了一个QProgressBar对象,并将它设置为主窗口的中央小部件。最后,我们启动了Worker对象。
在Worker对象的run方法中,我们使用一个简单的循环来模拟一个长时间运行的任务。在循环中,我们通过progress信号发射进度值,并暂停0.1秒钟。在循环结束后,我们通过finished信号发射信号。
在MainWindow类中,我们定义了两个槽函数:on_progress和on_finished。on_progress槽函数用于更新进度条,on_finished槽函数用于显示任务完成的消息框。我们在构造函数中连接了这两个槽函数。
最后,我们创建了一个Qt应用程序,并启动了我们的主窗口对象。当应用程序启动时,它将启动Worker对象,并显示一个进度条,直到Worker对象完成其任务。
阅读全文