博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PyQt5之QThread多线程
阅读量:3959 次
发布时间:2019-05-24

本文共 1874 字,大约阅读时间需要 6 分钟。

PyQt5之QThread多线程

要使用QThread开始一个线程,可以创建它的一个子类,然后覆盖其QThread.run()函数。

一、QThread类中的常用方法

方法 描述
start() 启动线程
wait() 阻止线程,直到满足如下条件之一:1、与此QThread对象关联的线程已完成执行(即从run()返回时)。如果线程完成执行,此函数将返回True;如果线程尚未启动,此函数也返回True。2、等待时间的单位是毫秒。如果时间是ULONG_MAX(默认值),则等待,永远不会超时(线程必须从run()返回);如果等待超时,此函数将返回False。
sleep(s) 强制当前线程睡眠s秒

二、QThread类中的常用信号

信号 描述
started 在开始执行run()函数之前,从相关线程发射此信号
finished 当程序完成业务逻辑时,从相关线程发射此信号

三、QThread实例

import sysfrom PyQt5 import QtCorefrom PyQt5.QtWidgets import *from PyQt5.QtGui import *from PyQt5.QtCore import *class Demo(QWidget):    def __init__(self):        super().__init__()        self.setGeometry(100, 50, 500, 400)        self.setWindowTitle('QThread')        self.thread = Worker()        self.list = QListWidget()        self.btn = QPushButton('开始')        layout = QGridLayout(self)        layout.addWidget(self.list,0,0,1,2)        layout.addWidget(self.btn,1,1)        self.btn.clicked.connect(self.slotStart)        self.thread.sinOut.connect(self.slotAdd)    def slotAdd(self,inf):        self.list.addItem(inf)        #实时刷新页面        QApplication.processEvents()    def slotStart(self):        self.btn.setEnabled(False)        self.thread.start()class Worker(QThread):    #自定义信号    sinOut = pyqtSignal(str)    def __init__(self):        super().__init__()        self.working = True        self.num = 0    def __del__(self):        self.working = False        self.wait()    def run(self):        while self.working == True:            file_str = 'File index{0}'.format(self.num)            self.num += 1            #发射信号            self.sinOut.emit(file_str)            #休眠2秒            self.sleep(2)if __name__ == "__main__":    app = QApplication(sys.argv)    form = Demo()    form.show()    sys.exit(app.exec_())

注:由于PyQt需要等待程序执行完毕才能进行下一步,这个过程表现在界面上就是卡顿;而如果在执行这个耗时程序时不断地运行QApplication.processEvents(),那么就可以实现一边执行耗时程序,一边刷新页面的功能,给人的感觉就是程序运行很流畅。

运行效果如下:

在这里插入图片描述

转载地址:http://ptozi.baihongyu.com/

你可能感兴趣的文章
赏心悦目的宏代码
查看>>
理解套接字recv(),send()
查看>>
发一个C++写的跨平台的BlockingQueue
查看>>
Linux TCP/IP协议栈剖析【体系结构篇】
查看>>
游戏开发中预防内存泄露的一些措施
查看>>
以前的文章全部移除了。
查看>>
几首歌
查看>>
蝴蝶泉边
查看>>
编码转换
查看>>
freerice
查看>>
Does your mother know
查看>>
《写出质量好软件的75条体会》暨答案ZT [转自monkyy的blog]
查看>>
关于详细设计
查看>>
POJ2838,Sliding Window(单调队列)
查看>>
牛客练习赛50,B tokitsukaze and Hash Table(STL+输入输出挂)
查看>>
POJ3728,The merchant(倍增LCA+分治)
查看>>
2019 ICPC Malaysia National,E. Optimal Slots(01背包变形)
查看>>
洛谷P1638 逛画展(双向队列)
查看>>
牛客练习赛51,D(二分图匹配)
查看>>
POJ2892,Tunnel Warfare(线段树维护连续区间)
查看>>