使用pyside6实现一个简单的线程池连接,需要两个不同按钮并行处理两个不同的任务,并带有ui窗口展示
时间: 2023-05-11 09:02:02 浏览: 138
pyserial+PySide6+qtdesigner的ui
非常感谢您的提问。以下是使用 PySide6 实现一个简单的线程池连接的代码示例:
```python
import sys
import time
from PySide6.QtCore import QObject, QRunnable, QThreadPool, Signal
from PySide6.QtWidgets import QApplication, QMainWindow, QPushButton, QTextEdit, QVBoxLayout, QWidget
class Worker(QRunnable):
def __init__(self, task_id):
super().__init__()
self.task_id = task_id
def run(self):
# 模拟任务执行
for i in range(5):
time.sleep(1)
print(f'Task {self.task_id}: {i+1}')
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle('线程池连接示例')
self.resize(400, 300)
# 创建线程池
self.threadpool = QThreadPool()
# 创建 UI 控件
self.button1 = QPushButton('任务1')
self.button2 = QPushButton('任务2')
self.textedit = QTextEdit()
# 将按钮点击事件与槽函数连接
self.button1.clicked.connect(self.start_task1)
self.button2.clicked.connect(self.start_task2)
# 创建布局并添加控件
layout = QVBoxLayout()
layout.addWidget(self.button1)
layout.addWidget(self.button2)
layout.addWidget(self.textedit)
# 创建主窗口部件并设置布局
widget = QWidget()
widget.setLayout(layout)
self.setCentralWidget(widget)
def start_task1(self):
# 创建任务并将其添加到线程池
task = Worker(1)
self.threadpool.start(task)
def start_task2(self):
# 创建任务并将其添加到线程池
task = Worker(2)
self.threadpool.start(task)
if __name__ == '__main__':
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec())
```
这个示例程序中,我们创建了一个 `Worker` 类,用于执行任务。在 `MainWindow` 类中,我们创建了两个按钮,分别用于启动两个不同的任务。当用户点击按钮时,我们创建一个 `Worker` 对象,并将其添加到线程池中。任务执行完毕后,我们可以在文本框中显示任务的执行结果。
希望这个示例程序能够对您有所帮助。如果您有任何问题或建议,请随时告诉我。
阅读全文