前言:
使用线程显示视频,整了好久,终于在这篇文章中获取启发:前来记录一哈。
PyQt5笔记——基于QThread的zip文件解压线程 - 掘金 (juejin.cn)
- 对于PyQt的GUI程序来说,当遇到计算密集型的操作时,需要单独创建一个线程处理密集计算的操作,否则,在进行计算操作时,UI界面会出现假死现象,带来不佳的用户体验。
- 对于PyQt开发,创建一个线程的方法是:创建一个以QThread为基类的类,然后在run()方法中编写相应的计算操作。之后就可以实例化一个线程对象,调用start()方法启动线程
代码实现:
pytqt5线程框架:
import os
from tqdm import tqdm
from PyQt5.QtCore import QThread, pyqtSignal
class ImageQThread(QThread):
'''
线程
'''
signal_process = pyqtSignal(ndarray) # 接收图片的信号
signal_finished = pyqtSignal(bool) # 解压完成信号(参数表示是否异常)
def __init__(self, arg1, arg2): #在这里可以接收参数,进行初始化
super().__init__()
self.arg1= arg1
self.arg1= arg1
def process(self, arg1, arg2):
'''
接收图片,并处理
'''
if 条件:
self.signal_process.emit(image) # 发送自定义信号,与主进程交互,接收图片并进行显示
self.signal_finished.emit(True)
else:
print('This is not zip')
self.signal_finished.emit(False)
def run(self): #重写run函数,调用执行的逻辑函数。
self.process(self.arg1, self.arg2)
在PyQt程序中使用(实现与主进程的交互):
image_thread = ImageQThread(arg1='参数1', arg2='参数2')
image_thread .signal_process.connect(process1)
image_thread .signal_finished .connect(process2)
image_thread .start() # 启动线程
def process1(参数):
处理逻辑
def process2(参数):
处理逻辑
整体实现框架,就是这样的,后面就需要自己补充逻辑实现了。实现代码我就不粘贴出来了。就记录一哈,pyqt5中线程的实现思路与过程。