pyqt5 多线程QThread自学记录

pyqt5多线程QThread自学记录

在编写qt的时候不加入多线程,运行程序往往会导致主进程卡死,比如执行下载某视频或者其他执行比较耗时的程序,泛滥了博客,就是没有理解怎么进行槽函数的关联和传递的
经过长时间的攻克,终于胜利记录如下
1.在qt中普通的槽函数关联

self.pushButton.clicked.connect(self.print)
def print(self)
	print("我被点击了。。。")

或者

# 需要引入 pyqtSlot 库函数
from PyQt5.QtCore import pyqtSlot

@pyqtSlot() #装饰器,此函数没有connect直接通过装饰器初始化连接槽函数
def on_pushButton_clicked(self):
	print("我点击了")

这样的连接槽函数,在我们程序运行耗时较长就会导致我们主进程卡死,同时也不能操作qt其他的小部件或者程序,所以就要使用到多线程,这里的多线程不是thread,threading,而是qt提供的QThread
2.如何使用QThread呢,首先我们要明白qt中自定义信号,通过鼠标点击发送事件
自定义信号和槽:自定义信号和槽

多线程的流程图

import time
from PyQt5.QtCore import QThread, pyqtSignal
# 自定义一个线程类继承QThread
class Puth_Thread(QThread):
    #自定义信号声明
    signal = pyqtSignal(str)

    # 带一个参数data
    def __init__(self,data,parent=None):
        super(Puth_Thread, self).__init__(parent)

	# 重写run函数,这个run函数就是我们的子线程需要执行的内容
    def run(self):
        for i in range(data):
            time.sleep(1)
            #通过emit发射自定义信号,同时向主程序发送一个i的参数
            self.signal.emit(str(i))
             # 注意这里与signal = pyqtSignal(str)中的类型相同

我们主程序导入Puth_Thread

# 主程序pushButton连接槽函数start
self.pushButton.clicked.connect(self.start)
# 定义槽函数
def start(self):
	# 调用Puth_Thread 并传递参数
	self.Push =Puth_Thread(100)
	# 线程连接接受函数receive
	self.Push.signal.connect(self.receive)
	# 启动线程
	self.push.start()
# 接收线程传来的事件 run函数i==msg接收
def receive(self,msg):
	print(msg)
	# 输出到textBrowser
	self.textBrowser.setText(str(msg))
	
	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

车载testing

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值