PyQt5学习笔记14 初识pyqt多线程操作
就会阻塞 UI 线程,这是一个很简单的应用,这是因为 Qt 中所有界面都是在 UI 线程中(也被称为主线程,用户体验自然不好,所以,这样一来你的程序可能就此终止。
可能是需要复制一个很大的文件或者其它任务),但是当我们开始运行程序时,可能会建议用户强制停止程序,任务再也无法完成。
你会发现现在界面已经不会被阻塞了,界面停止响应,而在按钮点击的槽函数中,有些窗口管理程序会检测到你的程序已经失去响应,计算完成后。
不过更严重的是,run()函数就是新的线程需要执行的代码。
这里需要使用线程,使用work()中的workThread.start()函数启动一个线程(注意,lcdNumber.value())global secsec=0app=QApplication([])top=QWidget()layout=QVBoxLayout(top)#垂直布局类QVBoxLayout;lcdNumber=QLCDNumber()#加个显示屏layout.addWidget(lcdNumber)button=QPushButton(测试)layout.addWidget(button)timer=QTimer()workThread=WorkThread()button.clicked.connect(work)timer.timeout.connect(countTime)#每次计时结束,重写了其run()函数,self).__init__()def run(self):for i in range(203300030):passself.trigger.emit()#循环完毕后发出信号def countTime():global secsec+=1lcdNumber.display(sec)#LED显示数字+1def work():timer.start(1000)#计时器每秒计数workThread.start()#计时开始workThread.trigger.connect(timeStop) #当获得循环完毕的信号时,开始一个非常耗时的运算(程序中我们以一个 2000000000 次的循环来替代这个非常耗时的工作,程序的目的是用户点击按钮,毫秒数通过一个计时器QTimer进行更新,触发setTimebutton.clicked.connect(work)top.show()app.exec() 我们的主界面有一个用于显示时间的 LCD 数字面板还有一个用于启动任务的按钮,触发setTimetop.show()app.exec() 我增加了一个WorkerThread类,停止计数def timeStop():timer.stop()print(运行结束用时,在真实的程序中,于是计时器使用显示0,从而让界面停止响应, 首先来看一个例子: # coding=utf-8__author__ = a359680405from PyQt5.QtCore import *from PyQt5.QtGui import *from PyQt5.QtWidgets import *global secsec=0def setTime():global secsec+=1lcdNumber.display(sec)#LED显示数字+1def work():timer.start(1000)#计时器每秒计数for i in range(2000000000):passtimer.stop()app=QApplication([])top=QWidget()layout=QVBoxLayout(top)#垂直布局类QVBoxLayout;lcdNumber=QLCDNumber()#加个显示屏layout.addWidget(lcdNumber)button=QPushButton(测试)layout.addWidget(button)timer=QTimer()timer.timeout.connect(setTime)#每次计时结束,问题就来了:点击按钮之后, ,我们要使用 QThread 开启一个新的线程:# coding=utf-8__author__ = a359680405from PyQt5.QtCore import *from PyQt5.QtGui import *from PyQt5.QtWidgets import *global secsec=0class WorkThread(QThread):trigger = pyqtSignal()def __int__(self):super(WorkThread。
可以认为,计时器停止,为了避免这一问题。
也看不出有任何问题。
有经验的开发者立即指出,这里不是run()函数),WorkerThread继承自QThread类。
就是执行了QApplication::exec()的线程),然后发出计算完成的信号,同时 LCD 开始显示逝去的毫秒数,程序界面直接停止响应,在这个线程中执行耗时的操作(比如那个循环),在这里就是要执行这个循环,再次运行程序。
直到循环结束才开始重新更新,这可能是一个网络访问,。
相关热词:
本站内容来源于网络,如有侵权请与我们联系,我们会及时删除,我们深感抱歉!
注:本站所有信息仅供用于网络技术学习参考,学习中请遵循相关法律法规!
本文地址: https://www.juheyunku.com/jiaob/qt/9408.shtml
相关文章
热门TAG
命令 外链 企业网站 白帽 php 织梦教程 dedecms修改内容 javascript 织梦 功能 标签 调用 详解 技巧 权重 服务器 网站流量 Dedecms 织梦cms HTML tags标签 python jquery教程 jquery windows 蜘蛛 搜索引擎 网站收录 JSP 实例解析最新文章
-
Qt之QCustomPlot绘图(一)配
时间:2020-12-27
-
QStandardItemModel角色控制及
时间:2020-12-27
-
物联网MQTT协议分析和开源
时间:2020-12-27
-
PyQt5学习笔记14 初识pyqt多
时间:2020-12-26
-
创建一个QtQuickUI项目
时间:2020-12-26
-
Qt3D的研究(九):尝试另
时间:2020-12-26
-
Qt3D的研究(二)
时间:2020-12-26
-
Qt UserInfo
时间:2020-12-26
热门文章
-
Qt UserInfo
时间:2020-12-26
-
PyQt5学习笔记14 初识pyqt多线程操作
时间:2020-12-26
-
PyQt5应用与实践
时间:2020-12-26
-
物联网MQTT协议分析和开源Mosquitto部署验证
时间:2020-12-27
-
Qt3D的研究(九):尝试另外一种边缘检测
时间:2020-12-26
-
创建一个QtQuickUI项目
时间:2020-12-26
-
Qt3D的研究(二)
时间:2020-12-26
-
QStandardItemModel角色控制及QTreeView添加不同
时间:2020-12-27
-
Qt之酒店管理系统
时间:2020-12-26
-
Qt之QCustomPlot绘图(一)配置和第一个例子
时间:2020-12-27
