PyQt5多线程和定时器
多线程
一般情况单线程就可以很好的完成任务,但是对于GUI程序来说,单线程就不能完全满足需求。如果有耗时流程,在单线程的情况下,界面操作就会卡死,直到耗时操作完成,才会响应界面操作。为了解决这个问题,PyQt提供了两个异步操作的对象:QThread和QTimer。
QTimer
功能:定时器,固定时间触发消息
接口:
方法 | 描述 |
start(milliseconds) | 启动定时器,单位是毫秒 |
stop() | 停止定时器 |
QThread
功能:开辟一个线程,和主线程并行执行
接口:
方法 | 描述 |
start() | 启动线程 |
sleep(seconds) | 线程休眠,单位秒 |
需求:分别使用QThread和QTimer
import sys
from PyQt5.QtCore import QTimer
from PyQt5.QtWidgets import QApplication, QWidget, QProgressBar class MyWidget(QWidget):
def __init__(self):
super(MyWidget, self).__init__()
self.currentValue = 0 self.progessBar = QProgressBar(self)
self.progessBar.resize(200, 50)
self.progessBar.move(20, 20)
self.progessBar.setValue(self.currentValue) # 定义一个定时器并启动定时器
self.time = QTimer()
self.time.timeout.connect(self.upgradeProgress)
self.time.start(200) def upgradeProgress(self):
self.currentValue = (self.currentValue + 1) % 101
self.progessBar.setValue(self.currentValue) if __name__ == '__main__':
app = QApplication(sys.argv)
w = MyWidget()
w.resize(500, 300)
w.move(300, 300)
w.setWindowTitle('Simple')
w.show()
sys.exit(app.exec_())
import sys
from PyQt5.QtCore import QThread, pyqtSignal
from PyQt5.QtWidgets import QApplication, QWidget, QProgressBar class MyWorker(QThread):
timeout = pyqtSignal() def __init__(self):
super(MyWorker, self).__init__() def run(self):
while True:
self.timeout.emit()
self.sleep(1) class MyWidget(QWidget):
def __init__(self):
super(MyWidget, self).__init__()
self.currentValue = 0 self.progessBar = QProgressBar(self)
self.progessBar.resize(200, 50)
self.progessBar.move(20, 20)
self.progessBar.setValue(self.currentValue) self.worker = MyWorker()
self.worker.timeout.connect(self.upgradeProgress)
self.worker.start() def upgradeProgress(self):
self.currentValue = (self.currentValue + 1) % 101
self.progessBar.setValue(self.currentValue) if __name__ == '__main__':
app = QApplication(sys.argv)
w = MyWidget()
w.resize(500, 300)
w.move(300, 300)
w.setWindowTitle('Simple')
w.show()
sys.exit(app.exec_())
PyQt5多线程和定时器的更多相关文章
- JAVA基础再回首(二十五)——Lock锁的使用、死锁问题、多线程生产者和消费者、线程池、匿名内部类使用多线程、定时器、面试题
JAVA基础再回首(二十五)--Lock锁的使用.死锁问题.多线程生产者和消费者.线程池.匿名内部类使用多线程.定时器.面试题 版权声明:转载必须注明本文转自程序猿杜鹏程的博客:http://blog ...
- PyQt5信号、定时器及多线程
信号 信号是用于界面自动变化的一个工具,原理是信号绑定了一个函数,当信号被触发时函数即被调用 举个例子 from PyQt5 import QtWidgets,QtCore from untitled ...
- pyqt5 多线程+定时器+读取本地图片
前言 一个程序界面有多个button 按钮时,单击一个按钮,若此按钮对应的信号正在执行,且还未执行完毕: 此时再次单击另外一个按钮,就会出现假死状态. 这个时候我们就需要使用 多线程去解决 多线程+定 ...
- Python3.5+PyQt5多线程+itchat实现微信防撤回桌面版代码
weChatThread线程类 之前一直不会python多线程,写这个程序的时候,发现不用多线程会陷入无限未响应状态.于是学了半天python多线程,但是在主函数里写的时候,发现一个问题,Ui主线程和 ...
- 多线程之----定时器TIMER
结上一篇 多线程的简单介绍 http://www.cnblogs.com/duanxiaojun/p/6595847.html 在上一讲中我主要是对多线程学习这个系列做了一个大致的学习计划,然后对 ...
- java 22 - 23 多线程之定时器的概述和使用例子
定时器是一个应用十分广泛的线程工具,可用于调度多个定时任务以后台线程的方式执行. 在Java中,可以通过Timer和TimerTask类来实现定义调度的功能 开发中 Quartz是一个完全由java编 ...
- [Python 多线程] Timer定时器/延迟执行、Event事件 (七)
Timer继承子Thread类,是Thread的子类,也是线程类,具有线程的能力和特征.这个类用来定义多久执行一个函数. 它的实例是能够延迟执行目标函数的线程,在真正执行目标函数之前,都可以cance ...
- java 多线程 day02 定时器
package com.czbk.thread; import java.util.Date;import java.util.Timer;import java.util.TimerTask; /* ...
- pyqt5多线程-简单例子
一.主要代码逻辑 from PyQt5 import QtWidgets, QtCore from testqt.TEST_QT_FROM import Ui_Dialog import sys fr ...
随机推荐
- ASP.NET WebAPI框架解析第二篇(HttpModule的创建和使用)
我们先看一下执行流程图 图中画红圈的部分便是HttpModule,在说创建HttpModule之前,先说一下HttpApplication对象,HttpApplication对象由Asp.net框架创 ...
- opencv C++构造并访问单通道和多通道Mat。
一:构造并访问单通道. int main(){ cv::Mat m=(cv::Mat_<int>(3,2)<<1,2,3,4,5,6); for(int i=0;i<m. ...
- 谈谈spring-boot-starter-data-redis序列化
在上一篇中springboot 2.X 集成redis中提到了在spring-boot-starter-data-redis中使用JdkSerializationRedisSerializerl来实现 ...
- 第三模块 :微服务网关Zuul架构和实践
52.Zuul网关架构剖析~1.mp4 请求过来之后首先会通过前置过滤器,然后到路由过滤器,路由过滤器是真正访问后台远程服务的,经过路由器之后,最后会传递给后置过滤器 在三个过滤器处理的过程中任何一个 ...
- php - 二维数组转一维数组总结
二维数组转一维数组总结 例如将如下二位数组转以为以为一维数组 $records = [ [ 'id' => 2135, 'first_name' => 'John', 'last_name ...
- Python3-pymysql模块-数据库操作之MySQL
博客转载 http://www.cnblogs.com/alex3714/articles/5950372.html 代码示例 import pymysql conn = None cursor = ...
- JavaScript图形实例:图形放大镜效果
1. 基本四瓣花型图案 根据四瓣花卉线的参数方程: t= r*(1+sin(12*θ)/5)*(0.5+sin(4*θ)/2); x=t*cos(θ)); y=t*sin(θ)); 编写如下的HTML ...
- 梳理搭建SSM步骤
以上全程手撕,如有不足或错误的,请指正!
- Web安全之验证码绕过
一,验证码绕过(on client) 首先让burpsuite处于抓包状态,打开pikachu的验证码绕过(on client)随意输入账号和密码,验证码先不输入,点击login,会提示验证码错误 然 ...
- keras 从txt加载预测数据
ImageDataGenerator.flow_from_directory()的用法已经非常多了,优点是简单方便,但数据量很大时,需要组织目录结构和copy数据,很浪费资源和时间 1. 训练时从tx ...