我可以使用PyQt5上的一个小界面,以及加载和处理图像的功能。该函数结合 PyQt 的工作执行大约 3-4 秒。
在处理图像时,整个界面被“冻结”。
在这种情况下如何实现多线程,并行化进程而不停止PyQt?
我没有使用多线程,我听说过 asyncio,但我不知道在这种情况下到底该使用什么。
UPD:演示问题的最小示例
import sys
from PyQt5.QtWidgets import *
from time import sleep
class Window(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setGeometry(300, 300, 200, 200)
self.setWindowTitle('Name')
self.lay = QVBoxLayout(self)
self.inp = QLineEdit()
self.lay.addWidget(self.inp)
self.btn = QPushButton('Действие')
self.lay.addWidget(self.btn)
self.btn.clicked.connect(lambda x: self.some_func(self.inp.text()))
def some_func(self, n):
sleep(int(n)) # Любое действие, требующее существенного времени на выполнение
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Window()
ex.show()
sys.exit(app.exec())
QRunnable类是一个接口,用于表示要执行的任务或一段代码,由run()函数的重新实现来表示。
您可以使用QThreadPool在单独的线程中执行您的代码...