举一个使用多线程解决pyqt5调用子进程主窗口未响应的例子
时间: 2023-06-08 16:08:28 浏览: 197
pyqt5--Qthread解决窗口未响应问题
以下是一个使用多线程解决 Pyqt5 调用子进程主窗口未响应的示例代码:
```
import sys
import time
from PyQt5.QtWidgets import QApplication, QMainWindow, QTextEdit, QPushButton
from PyQt5.QtCore import QThread, pyqtSignal
class Worker(QThread):
finished = pyqtSignal()
def run(self):
time.sleep(5)
self.finished.emit()
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setGeometry(100, 100, 500, 300)
self.setWindowTitle('Multi-threading Example')
self.textEdit = QTextEdit(self)
self.textEdit.move(10, 10)
self.textEdit.resize(480, 200)
self.button = QPushButton('Start', self)
self.button.move(10, 220)
self.button.resize(480, 30)
self.button.clicked.connect(self.start_worker)
def start_worker(self):
self.button.setEnabled(False)
# Create worker and connect signals
self.worker = Worker()
self.worker.finished.connect(self.worker_finished)
# Start worker
self.worker.start()
def worker_finished(self):
self.button.setEnabled(True)
self.textEdit.append('Worker finished.')
if __name__ == '__main__':
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())
```
在这个示例中,主窗口创建了一个按钮和一个文本框。当按钮被点击时,会创建一个新线程,在新线程中运行 `Worker` 类,并通过信号 `finished` 通知主线程。当 `finished` 信号被触发时,主窗口的按钮将被重新启用,并在文本框中打印一条消息。
这种方式可以在 Pyqt5 中使用多线程来避免子进程影响主窗口的响应问题。
阅读全文