请给出pyqt线程池代码例子
时间: 2023-07-17 21:12:13 浏览: 103
以下是一个使用PyQt线程池的简单示例代码:
```python
from PyQt5.QtCore import QRunnable, QThreadPool, Qt
from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton, QVBoxLayout, QWidget, QLabel
class Worker(QRunnable):
def __init__(self, data):
super().__init__()
self.data = data
def run(self):
# 模拟耗时操作
result = self.data * 2
# 发送结果信号
self.result_signal.emit(result)
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("Thread Pool Example")
self.central_widget = QWidget(self)
self.setCentralWidget(self.central_widget)
self.layout = QVBoxLayout(self.central_widget)
self.label = QLabel("Data: 0", self.central_widget)
self.layout.addWidget(self.label)
self.button = QPushButton("Start", self.central_widget)
self.layout.addWidget(self.button)
self.button.clicked.connect(self.start_worker)
self.threadpool = QThreadPool()
def start_worker(self):
data = 10
worker = Worker(data)
worker.result_signal.connect(self.update_data)
# 将任务添加到线程池中
self.threadpool.start(worker)
def update_data(self, result):
self.label.setText(f"Data: {result}")
if __name__ == "__main__":
app = QApplication([])
window = MainWindow()
window.show()
app.exec()
```
在这个示例中,我们创建了一个主窗口,并包含一个标签 `QLabel` 和一个按钮 `QPushButton`。当点击按钮时,会创建一个Worker对象,该对象会在后台线程中执行耗时操作,并将结果通过信号 `result_signal` 发送回主线程。主线程接收到结果后,调用 `update_data` 方法更新标签的内容。
我们使用了PyQt提供的线程池 `QThreadPool` 来管理多个线程对象。通过将任务添加到线程池中,线程池会自动调度线程并执行任务。
这个示例展示了如何使用PyQt线程池来执行后台任务,并在主线程中更新UI界面。你可以根据自己的需求修改代码,例如添加更多的任务、处理更复杂的逻辑等。
阅读全文