[PyQt5] PyQt5 多线程 QThread 实现(转载)

您所在的位置:网站首页 pyqt线程退出 [PyQt5] PyQt5 多线程 QThread 实现(转载)

[PyQt5] PyQt5 多线程 QThread 实现(转载)

#[PyQt5] PyQt5 多线程 QThread 实现(转载) | 来源: 网络整理| 查看: 265

简介

QThread类提供了一种独立于平台的线程管理方法。

QThread对象管理程序中的一个控制线程。在run()中开始执行QThreads。默认情况下,run()通过调用exec()启动事件循环,并在线程中运行Qt事件循环。

创建一个新线程 class Thread(QThread): def __init__(self): super().__init__() def run(self): # 线程相关代码 pass # 创建一个新的线程 thread = Thread() thread.start()

在使用线程时可以直接得到Thread实例,调用其start()函数即可启动线程,线程启动后,会调用其实现的run方法,该方法就是线程的执行函数,当run()退出之后线程基本就结束了。

QThread中常用的方法

【PyQt5】PyQt5 多线程 QThread 实现

例子实现

下面的例子通过在QThread中定义两个自定义信号实现时间的变化和动态为QListWidget添加控件

#!/usr/bin/env python # -*- coding: utf-8 -*- """ Created on 2019年1月16日 @author: yiluo @site: https://github.com/bingshilei @email: [email protected] @file: QThreadDemo2 @description: 使用多线程动态添加控件 """ import time from PyQt5.QtCore import QThread, pyqtSignal, QDateTime from PyQt5.QtWidgets import QWidget, QLineEdit, QListWidget, QPushButton,\ QVBoxLayout, QLabel ''' 声明线程类 ''' class addItemThread(QThread): add_item = pyqtSignal(str) show_time = pyqtSignal(str) ''' 添加控件 ''' def __init__(self,*args, **kwargs): super(addItemThread, self).__init__(*args, **kwargs) self.num = 0 def run(self, *args, **kwargs): while True: file_str = 'File index{0}'.format(self.num,*args, **kwargs) self.num +=1 #发送添加信号 self.add_item.emit(file_str) date = QDateTime.currentDateTime() currtime = date.toString('yyyy-MM-dd hh:mm:ss') print(currtime) self.show_time.emit(str(currtime)) time.sleep(1) class Window(QWidget): def __init__(self, *args, **kwargs): super(Window, self).__init__(*args, **kwargs) self.setWindowTitle('多线程动态添加控件') # x,y,w,h self.setGeometry(800, 100, 500, 750) #创建QListWidget控件 self.listWidget = QListWidget() #创建按钮控件 self.btn = QPushButton('开始',self) self.lb = QLabel('显示时间',self) #创建布局控件 self.vlayout = QVBoxLayout() #将按钮和列表控件添加到布局 self.vlayout.addWidget(self.btn) self.vlayout.addWidget(self.lb) self.vlayout.addWidget(self.listWidget) #设置窗体的布局 self.setLayout(self.vlayout) #绑定按钮槽函数 self.btn.clicked.connect(self.startThread) #声明线程实例 self.additemthread = addItemThread() #绑定增加控件函数 self.additemthread.add_item.connect(self.addItem) #绑定显示时间函数 self.additemthread.show_time.connect(self.showTime) ''' @description:按钮开始,启动线程 ''' def startThread(self): #按钮不可用 self.btn.setEnabled(False) #启动线程 self.additemthread.start() ''' @description:为listwidget增加项 @param:项的值 ''' def addItem(self,file_str): self.listWidget.addItem(file_str) ''' @description:显示时间 @param:项的值 ''' def showTime(self,time): self.lb.setText(time) if __name__ == '__main__': import sys from PyQt5.QtWidgets import QApplication app = QApplication(sys.argv) w = Window() w.show() sys.exit(app.exec_()) 运行结果

点击开始按钮,时间会进行变化,且在下方为QListWidget不断增加项

【PyQt5】PyQt5 多线程 QThread 实现(转载)

【PyQt5】PyQt5 多线程 QThread 实现(转载)

以上,就是自定义信号和QThread的运用。

谢谢您宝贵时间观看。

作者:卖火柴的小小喷泉

链接:https://www.jianshu.com/p/18d7b119edcc

来源:简书

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

pyqt5 qt gui QThread 本作品采用《CC 协议》,转载必须注明作者和本文链接


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3