文章目录
- 1、简介
- 2、功能展示
- 1) 展示
- 2)、功能实现
1、简介
当窗口数据比较简单的时候,我们可以把数据处理放在窗口初始化代码里,但如果是读取数据时间比较长,比如网络请求,数据处理比较大的地方。我们可以创建QThread 线程。
实现界面的数据显示和数据读取的分离。满足MVC模型的设计要求。
2、功能展示
1) 展示
2)、功能实现
# -*- coding: utf-8 -*-
'''
【简介】
PyQT5中 QThread 例子
'''
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
import sys
class MainWidget(QWidget):
def __init__(self,parent=None):
super(MainWidget,self).__init__(parent)
self.setWindowTitle("QThread 例子")
self.thread = Worker() #创建线程实例
self.listFile = QListWidget() #列表组件
self.btnStart = QPushButton('开始')#按钮
layout = QGridLayout(self) #布局文件
layout.addWidget(self.listFile,0,0,1,2) #布局中添加列表及其位置
layout.addWidget(self.btnStart,1,1) #布局中添加 按钮及其位置
self.btnStart.clicked.connect( self.slotStart ) #绑定按钮点击事件
self.thread.sinOut.connect(self.slotAdd) #信号绑定槽函数
def slotAdd(self,file_inf):
self.listFile.addItem(file_inf) #列表显示item
def slotStart(self):
self.btnStart.setEnabled(False)
self.thread.start() #开启线程
class Worker(QThread):
sinOut = pyqtSignal(str) #创建新的信号,并且有参数
def __init__(self,parent=None): #构造方法 创建号对象之后,会自动调用
super(Worker,self).__init__(parent)
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)
demo = MainWidget()
demo.show()
sys.exit(app.exec_())
文件参考:
PyQt 快速开发与实践
本人郑重声明,本博客所著文章、图片版权归权利人持有,本博只做学习交流分享所用,不做任何商业用途。访问者可將本博提供的內容或服务用于个人学习、研究或欣赏,不得用于商业使用。同時,访问者应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人的合法权利;如果用于商业用途,须征得相关权利人的书面授权。若以上文章、图片的原作者不愿意在此展示內容,请及时通知在下,將及时予以刪除