qpython thread_利用PyQt中的QThread类实现多线程

用PyQt中的QThread类实现多线程

利用PyQt中的pyqtSignal类实现信息的触发和捕获,即定义事件和订阅事件

利用QThread类实现多线程的方法

1,新建一个python类,继承自QThread

from PyQt5.QtCore import QThread

class SubThread(QThread):

2,重写__init__(),__del__()和run()函数

from PyQt5.QtCore import QThread

class SubThread(QThread):

def __init__(self):

super().__init__()

# 以下加入需要的代码

def __del__(self):

self.wait()

def run(self):

# 以下加入子线程执行的代码

3,将继承自QThread类实例化,然后调用实例对象的start()函数,即可开启新线程

【重点说明】

QThread的子类的实例,必须放在app = QtWidgets.QApplication(sys.argv)和sys.exit(app.exec_())代码之间。

if __name__ == '__main__':

app = QtWidgets.QApplication(sys.argv)

subthread = SubThread()

subthread.start()

sys.exit(app.exec_())

利用pyqtSignal类实现信息触发和捕获的方法

1,在类内头部定义pyqtSignal属性,记住,是类级别属性

from PyQt5.QtCore import QThread, pyqtSignal

class SubThread(QThread):

messagetrigger = pyqtSignal(str)

def __init__(self):

super().__init__()

# 以下加入需要的代码

def __del__(self):

self.wait()

def run(self):

# 以下加入子线程执行的代码

2,在需要触发信息的地方使用,调用pyqtSignal的emit()函数触发消息

import timefrom PyQt5.QtCore

import QThread, pyqtSignal, QObject

class SubThread(QThread):

messagetrigger = pyqtSignal(str)

def __init__(self):

super().__init__()

def __del__(self):

self.wait()

def run(self):

self.messagetrigger.emit('子线程开始')

time.sleep(2)

self.messagetrigger.emit('子线程结束')

3,捕获消息,使用pyqtSignal的connect()连接回调函数,在回调函数内处理捕获到的信息,完整代码如下:

import sysimport timefrom PyQt5.QtCore

import QThread, pyqtSignal, QObject

from PyQt5 import QtWidgets

class SubThread(QThread):

messagetrigger = pyqtSignal(str)

def __init__(self):

super().__init__()

def __del__(self):

self.wait()

def run(self):

self.messagetrigger.emit('子线程开始')

time.sleep(2)

self.messagetrigger.emit('子线程结束')

def callback(msg):

print(msg)

if __name__ == '__main__':

app = QtWidgets.QApplication(sys.argv)

subthread = SubThread()

subthread.messagetrigger.connect(callback)

subthread.start()

sys.exit(app.exec_())

以上就是本文的全部内容了,希望对大家学习python能够有所帮助

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值