PyQt5线程学习笔记:信号和槽函数

前言:

使用线程显示视频,整了好久,终于在这篇文章中获取启发:前来记录一哈。

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中线程的实现思路与过程。

你可能感兴趣的:(QT,学习)