使用pyside6实现一个简单的线程池连接,需要并行处理两个不同的任务,并带有ui窗口展示
时间: 2023-05-11 07:02:00 浏览: 126
非常感谢您的问题。以下是使用 PySide6 实现一个简单的线程池连接,需要并行处理两个不同的任务,并带有 UI 窗口展示的代码示例:
```python
import sys
import time
from PySide6.QtCore import QObject, QRunnable, QThreadPool, Signal
from PySide6.QtWidgets import QApplication, QMainWindow, QLabel, QVBoxLayout, QWidget, QPushButton
class Worker(QRunnable):
def __init__(self, task_id):
super().__init__()
self.task_id = task_id
def run(self):
print(f"Task {self.task_id} started")
time.sleep(5)
print(f"Task {self.task_id} finished")
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("Thread Pool Example")
self.central_widget = QWidget()
self.setCentralWidget(self.central_widget)
self.layout = QVBoxLayout()
self.central_widget.setLayout(self.layout)
self.label = QLabel("Click the button to start the tasks")
self.layout.addWidget(self.label)
self.button = QPushButton("Start Tasks")
self.button.clicked.connect(self.start_tasks)
self.layout.addWidget(self.button)
self.threadpool = QThreadPool()
def start_tasks(self):
self.label.setText("Tasks started")
self.button.setEnabled(False)
for i in range(2):
worker = Worker(i)
self.threadpool.start(worker)
self.threadpool.waitForDone()
self.label.setText("Tasks finished")
self.button.setEnabled(True)
if __name__ == "__main__":
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec())
```
这个示例程序创建了一个 `Worker` 类,用于执行任务。每个任务都有一个唯一的 ID,可以在 `Worker` 的构造函数中传入。`Worker` 类继承自 `QRunnable`,这意味着它可以在一个线程池中运行。
`MainWindow` 类是应用程序的主窗口。它包含一个标签和一个按钮,用于启动任务。当用户点击按钮时,`start_tasks` 方法会创建两个 `Worker` 对象,并将它们提交到线程池中运行。然后,它会等待所有任务完成,然后更新标签的文本。
这个示例程序演示了如何使用 PySide6 创建一个简单的线程池连接,以及如何在 UI 窗口中展示任务的执行情况。希望这个示例对您有所帮助!
阅读全文