QT

推荐列表 站点导航

当前位置:首页 > 脚本编程 > QT >

PyQt5学习笔记14 初识pyqt多线程操作

来源:网络整理  作者:  发布时间:2020-12-26 16:36
首先来看一个例子: coding=utf-8__author__= 39;a359680405 39;fromPyQt5 QtCoreimport*fromPyQt5 QtGuiimport*fromPyQt5 QtWidgetsimport*globalsecse...

就会阻塞 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

相关文章
最新文章
Qt之QCustomPlot绘图(一)配 Qt之QCustomPlot绘图(一)配

时间:2020-12-27

QStandardItemModel角色控制及 QStandardItemModel角色控制及

时间:2020-12-27

物联网MQTT协议分析和开源 物联网MQTT协议分析和开源

时间:2020-12-27

PyQt5学习笔记14 初识pyqt多 PyQt5学习笔记14 初识pyqt多

时间:2020-12-26

创建一个QtQuickUI项目 创建一个QtQuickUI项目

时间:2020-12-26

Qt3D的研究(九):尝试另 Qt3D的研究(九):尝试另

时间:2020-12-26

Qt3D的研究(二) Qt3D的研究(二)

时间:2020-12-26

Qt UserInfo Qt UserInfo

时间:2020-12-26

Copyright © www.juheyunku.com      关于 | 合作 | 声明 | 联系 | 更新 | 地图 | Tags

PyQt5学习笔记14 初识pyqt多线程操作

2020-12-26 编辑:

就会阻塞 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

相关文章

风云图片

推荐阅读

返回QT频道首页