PyQt5 界面显示无响应将耗时操作放在子线程中执行,不要在主线程中执行,代码怎么写
时间: 2024-03-04 07:49:06 浏览: 20
在 PyQt5 中,将耗时操作放在子线程中执行,可以使用 QThread 和信号槽机制来实现。具体代码如下:
```python
from PyQt5.QtCore import QThread, pyqtSignal
class Worker(QThread):
# 定义一个信号,用于在子线程中发送消息给主线程
update_date = pyqtSignal(str)
def __init__(self):
super().__init__()
def run(self):
# 进行耗时操作
data = 'Hello world'
# 发送消息给主线程
self.update_date.emit(data)
```
在主程序中,我们需要实例化 Worker 类,并连接信号槽:
```python
from PyQt5.QtWidgets import QApplication, QMainWindow
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.worker = Worker()
self.worker.update_date.connect(self.update_date)
self.worker.start()
def update_date(self, data):
# 在主线程中更新界面
self.textEdit.setText(data)
```
在 Worker 类的 run 方法中执行耗时操作,通过信号槽机制将结果发送给主线程,在主线程中更新界面。这样就可以将耗时操作放在子线程中执行,避免阻塞主线程,提高界面的响应速度。