使用pyside6实现带有ui显示的线程池连接, 两个不同按钮并行处理两个不同的任务, 按钮一实现5次网络请求,每次请求睡眠2秒,并将结果添加到QListWidget中 按钮二在QListWidget中添加item,每次睡眠2秒。
时间: 2023-05-11 11:02:06 浏览: 371
好的,这是一个关于使用pyside6实现带有ui显示的线程池连接的问题,需要实现两个不同按钮并行处理两个不同的任务。按钮一实现5次网络请求,每次请求睡眠2秒,并将结果添加到QListWidget中。按钮二在QListWidget中添加item,每次睡眠2秒。这个问题可以通过使用QThreadPool和QRunnable来实现。具体实现的代码可以参考以下示例:
```python
import sys
import time
from PySide6.QtCore import *
from PySide6.QtGui import *
from PySide6.QtWidgets import *
class Worker(QRunnable):
def __init__(self, func, *args):
super().__init__()
self.func = func
self.args = args
def run(self):
self.func(*self.args)
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setWindowTitle("线程池连接示例")
self.setGeometry(300, 300, 400, 300)
self.list_widget = QListWidget(self)
self.list_widget.setGeometry(20, 20, 360, 200)
button1 = QPushButton("按钮一", self)
button1.setGeometry(20, 230, 160, 40)
button1.clicked.connect(self.on_button1_clicked)
button2 = QPushButton("按钮二", self)
button2.setGeometry(200, 230, 160, 40)
button2.clicked.connect(self.on_button2_clicked)
self.threadpool = QThreadPool()
def on_button1_clicked(self):
for i in range(5):
worker = Worker(self.do_network_request, i)
self.threadpool.start(worker)
def on_button2_clicked(self):
worker = Worker(self.do_add_item)
self.threadpool.start(worker)
def do_network_request(self, index):
time.sleep(2)
result = f"网络请求 {index} 完成"
self.list_widget.addItem(result)
def do_add_item(self):
time.sleep(2)
self.list_widget.addItem("添加item完成")
if __name__ == '__main__':
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())
```
在这个示例中,我们创建了一个Worker类,它继承自QRunnable,并接受一个函数和参数作为参数。在run方法中,我们调用了传入的函数,并传入参数。这个Worker类可以用来执行我们需要在线程中执行的函数。
在MainWindow类中,我们创建了一个QListWidget和两个QPushButton。当按钮一被点击时,我们创建了5个Worker对象,并将它们添加到线程池中执行。每个Worker对象都执行do_network_request函数,这个函数模拟了一个网络请求,并将结果添加到QListWidget中。当按钮二被点击时,我们创建了一个Worker对象,并将它添加到线程池中执行。这个Worker对象执行do_add_item函数,这个函数模拟了在QListWidget中添加item的操作。
通过使用QThreadPool和QRunnable,我们可以轻松地实现带有ui显示的线程池连接,实现并行处理不同的任务。
阅读全文