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
    评论
PyQt,可以使用QThread实现多线程。具体步骤如下: 1. 创建一个继承自QThread的自定义线程。 2. 在自定义线程实现run()方法,该方法编写线程的具体操作。 3. 在主线程创建自定义线程对象,并调用start()方法启动线程。 4. 在主线程使用信号与槽机制来与自定义线程进行通信。 例如,下面是一个简单的示例: ```python from PyQt5.QtCore import QThread, pyqtSignal class CustomThread(QThread): # 自定义信号,用于在主线程更新UI signal = pyqtSignal(str) def __init__(self, parent=None): super().__init__(parent) def run(self): # 在线程执行的操作 for i in range(10): self.sleep(1) # 模拟耗时操作 self.signal.emit(f"线程执行到第{i}步") # 发射信号,通知主线程更新UI ``` 在主线程,我们可以这样使用: ```python from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel class MainWindow(QMainWindow): def __init__(self): super().__init__() self.label = QLabel("等待线程执行", self) self.label.move(50, 50) self.thread = CustomThread(self) self.thread.signal.connect(self.update_label) # 将自定义信号连接到槽函数 self.thread.start() # 启动线程 def update_label(self, text): self.label.setText(text) if __name__ == '__main__': app = QApplication([]) window = MainWindow() window.show() app.exec_() ``` 在这个例,我们创建了一个自定义线程CustomThread,并在其实现了一个简单的计数器。在主线程,我们创建了一个QLabel来显示线程的执行进度,然后创建了一个CustomThread对象,将其自定义信号连接到槽函数update_label上,并启动线程。每次线程执行到一定步骤时,就会发射一个信号,通知主线程更新UI。在槽函数update_label,我们只需要更新QLabel的文本即可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值