没有合适的资源?快使用搜索试试~ 我知道了~
首页PyQt5自学记录(1)——PyQt5多线程实现详解
PyQt5自学记录(1)——PyQt5中多线程实现详解 最近想用PyQt5完成图像识别的一个GUI系统,在调用算法模型进行识别的时候,界面会卡住没有反应,所以想学习一下多线程解决这个问题。然后。。。发现没有基础学习来确实挺难,幸运地是最终实现了多线程,记录一下学习过程。如有错误,希望指正,一起进步。 进程和线程 线程是一个轻负荷的子进程,是最小的处理单元。线程被包含在进程之中,是进程中的实际运作单位。一个进程可以并发多个线程,每条线程同时执行不同的任务,并且,线程是独立的,一个线程发生错误,不影响其他线程正常执行。 进程是指正在运行中的应用程序。每个进程都有自己独立的内存空间,当用户启动一个进
资源详情
资源评论
资源推荐

PyQt5自学记录(自学记录(1))——PyQt5多线程实现详解多线程实现详解
PyQt5自学记录(自学记录(1))——PyQt5中多线程实现详解中多线程实现详解
最近想用PyQt5完成图像识别的一个GUI系统,在调用算法模型进行识别的时候,界面会卡住没有反应,所以想学习一下多线程解决这
个问题。然后。。。发现没有基础学习来确实挺难,幸运地是最终实现了多线程,记录一下学习过程。如有错误,希望指正,一起进
步。
进程和线程进程和线程
线程线程是一个轻负荷的子进程,是最小的处理单元。线程被包含在进程之中,是进程中的实际运作单位。一个进程可以并发多个线程,每一个进程可以并发多个线程,每
条线程同时执行不同的任务条线程同时执行不同的任务,并且,线程是独立的,一个线程发生错误,不影响其他线程正常执行。线程是独立的,一个线程发生错误,不影响其他线程正常执行。
进程进程是指正在运行中的应用程序。每个进程都有自己独立的内存空间,当用户启动一个进程时,操作系统就会为该进程分配一个独立的
内存空间,让应用程序在独立内存中运行
在实现多任务中,这篇博客中写到,要实现多任务,通常我们会设计Master-Worker模式,Master负责分配任务,Worker负责执行任
务,因此,多任务环境下,通常是一个Master,多个Worker。如果用多进程实现多进程实现Master-Worker,主进程就是Master,其他进程就是
Worker。如果用多线程实现多线程实现Master-Worker,主线程就是Master,其他线程就是Worker。在Windows系统下,多线程的效率要比多进程
的效率要高。
PyQt5的多线程实现的多线程实现
PyQt5中自定义信号中自定义信号
在介绍PyQt5的多线程实现之前,先介绍一下PyQt5中自定义信号的方法。
我们先来看一下PyQt5中自带的信号clicked的实现机制:
self.Button_Start.clicked.connect(self.Start)
通过鼠标点击(事件)触发信号,通过信号的传递控制相应的操作是否进行。自定义信号同样满足这种机制,自定义信号的机制与主要
函数如下图:
首先要声明一个信号,通过信号名通过信号名 = pyqtSignal(类型类型)实现实现
finishSignal = pyqtSignal(str) # 信号类型:str
第二步要明确信号控制的操作,也就是槽函数。信号发出之后我们希望进行的操作,通过信号所在类实例通过信号所在类实例.信号名信号名.connect(槽函数槽函数)实实
现现。
self.thread.finishSignal.connect(self.Change) # 信号挂接到槽:update
def Change(self, msg):
print(msg)
self.label.setText(str(msg))
最后一步,明确信号的触发机制,我们确定了信号以及信号控制的槽函数,那么什么时候发出这个消息呢,这就需要信号的触发机
制,通过信号名通过信号名.emit(信号内容信号内容)实现实现。
self.finishSignal.emit(str(i)) # 发射信号
总结:总结:emit(i)函数触发自定义信号将参数函数触发自定义信号将参数i发送给槽函数,槽函数接受信号,执行指定操作。发送给槽函数,槽函数接受信号,执行指定操作。
多线程实现多线程实现
理解了自定义信号PyQt5的多线程也就不难了,一个简单的例子看一下他的实现过程:主线程执行GUI界面,子线程用定时器读秒实时
显示在主线程的GUI界面中。
通过QtDesigner设计GUI界面,实现逻辑界面和显示界面的分开,对新手来说无疑是一个福音。首先看一下整体的一个结构
therad.py是线程类文件,thread.ui是QtDesigner生成的UI文件,Thread_gui.py是由UI文件转换来的界面py文件,Thread_win.py是编写
的逻辑文件。下面详细介绍多线程实现过程。
第一步第一步:利用QtDesigner设计显示界面。并转换为py文件,也就是图中的thread.ui和Thread_gui.py文件。生成的Thread_gui.py不需要
做任何更改,在逻辑文件中设置相关逻辑操作,Thread_gui.py代码如下
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'untitled.ui'
#
# Created by: PyQt5 UI code generator 5.13.0
#
# WARNING! All changes made in this file will be lost!


















安全验证
文档复制为VIP权益,开通VIP直接复制

评论0