PyQt5 QThread倒计时功能的实现代码


Posted in Python onApril 02, 2021

1.创建多线程类
全局变量 sec

class work_thread(QThread):
 timer = pyqtSignal() # 每隔一秒发送信号
 end = pyqtSignal() # 计数完成发送信号

 def run(self) -> None:
  while True:
   self.sleep(1)
   if sec == 0:
    self.end.emit() # 发送end信号
    break
   self.timer.emit()

2.实例化线程类,绑定计数,技术结束事件

self.label.setText("20")
global sec
sec = 20
self.work_thread = work_thread()
self.work_thread.timer.connect(self.count_time)
self.work_thread.end.connect(self.end)

3.绑定开始按钮事件

self.pushButton.clicked.connect(self.start)

4.事件方法

def count_time(self):
 global sec
 sec = int(self.label.text())
 sec -= 1
 self.label.setText(str(sec))

def end(self):
 self.statusbar.showMessage("计数停止")

def start(self):
 self.work_thread.start() # 启动线程

PS:知识点扩展

PyQt5 倒计时按钮功能实现

"""
这个例子中我们实现了两个功能:菜单按钮、带倒计时的按钮(账户注册的时候经常会碰到)。
"""
from PyQt5.QtWidgets import QWidget, QApplication, QPushButton, QMenu
from PyQt5.QtCore import QTimer
import sys

class Example(QWidget):

  def __init__(self):
    super().__init__()
    self.initUI()

  def initUI(self):

    self.resize(400,300)
    self.setWindowTitle('早点毕业吧--按钮(QPushButton)')

    bt1 = QPushButton("这是什么",self)
    bt1.move(50,50)

    self.bt2 = QPushButton('发送验证码',self)
    self.bt2.move(200,50)
    """
设置菜单按钮其实很简单,首先我们新建一个QMenu对象。这里的addSeparator(),其实就是给菜单增加一个分隔符。
    """
    menu = QMenu(self)
    menu.addAction('我是')
    menu.addSeparator()
    menu.addAction('世界上')
    menu.addSeparator()
    menu.addAction('最帅的')

    bt1.setMenu(menu)#然后将这个菜单添加到QPushButton对象中
    """
第二个例子,我们使用到QTimer这个类,我们前面很多次都用到了这个和时间相关的类。后面会专门的讲解的。
QTimer类提供重复性和单次定时器。QTimer类为定时器提供高级编程接口。要使用它,请创建一个QTimer,将其timeout()信号连接到相应的插槽,然后调用start()。从此以后,它将以固定的时间间隔发出timeout()信号。
setInterval()该属性拥有以毫秒为单位的超时时间间隔。此属性的默认值为0。 
    """

    self.count = 10
    self.bt2.clicked.connect(self.Action)
    self.time = QTimer(self)
    self.time.setInterval(1000)
    self.time.timeout.connect(self.Refresh)

    self.show()
    """
我们单击按钮后,进行判断若按钮没有被禁用,则激活定时器,同时将按钮禁用,即禁止点击。
    """
  def Action(self):
    if self.bt2.isEnabled():
      self.time.start()
      self.bt2.setEnabled(False)
    """
进入超时状态后,我们开始倒计时。同时让按钮上的文字不断的在变化。
当倒计时完成的时候,我们停止定时器。将按钮恢复成正常的状态。同时重置倒计时的值,为下次的使用做好准备。 
    """
  def Refresh(self):
    if self.count > 0:
      self.bt2.setText(str(self.count)+'秒后重发')
      self.count -= 1
    else:
      self.time.stop()
      self.bt2.setEnabled(True)
      self.bt2.setText('发送验证码')
      self.count = 10

if __name__ == '__main__':
  app = QApplication(sys.argv)
  ex = Example()
  sys.exit(app.exec_())

到此这篇关于PyQt5 QThread倒计时的文章就介绍到这了,更多相关PyQt5 QThread倒计时内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python获取CPU、内存使用率以及网络使用状态代码
Feb 08 Python
解决Pycharm无法import自己安装的第三方module问题
May 18 Python
详解pandas删除缺失数据(pd.dropna()方法)
Jun 25 Python
Python 给定的经纬度标注在地图上的实现方法
Jul 05 Python
python爬虫项目设置一个中断重连的程序的实现
Jul 26 Python
python计算n的阶乘的方法代码
Oct 25 Python
python3中numpy函数tile的用法详解
Dec 04 Python
Python Pickle 实现在同一个文件中序列化多个对象
Dec 30 Python
Django 再谈一谈json序列化
Mar 16 Python
Pycharm自动添加文件头注释和函数注释参数的方法
Oct 23 Python
python基础之函数的定义和调用
Oct 24 Python
python脚本框架webpy模板控制结构
Nov 20 Python
Python中Permission denied的解决方案
Apr 02 #Python
python爬不同图片分别保存在不同文件夹中的实现
Python读取文件夹下的所有文件实例代码
如何用python识别滑块验证码中的缺口
python 实现定时任务的四种方式
Apr 01 #Python
python读取pdf格式文档的实现代码
Python中使用Lambda函数的5种用法
Apr 01 #Python
You might like
phpBB BBcode处理的漏洞
2006/10/09 PHP
wiki-shan写的php在线加密的解密程序
2008/09/07 PHP
PHP+ajax分页实例简析
2015/12/07 PHP
IE8 浏览器Cookie的处理
2009/01/31 Javascript
jquery 学习之一 对象访问
2010/11/23 Javascript
jQuery1.4.2与老版本json格式兼容的解决方法
2011/02/12 Javascript
js实现倒计时(距离结束还有)示例代码
2013/07/24 Javascript
基于jquery实现一张图片点击鼠标放大再点缩小
2013/09/29 Javascript
5秒后跳转到另一个页面的js代码
2013/10/12 Javascript
nodejs教程之环境安装及运行
2014/11/21 NodeJs
js运动动画的八个知识点
2015/03/12 Javascript
JS实现点击按钮控制Div变宽、增高及调整背景色的方法
2015/08/05 Javascript
jQuery实现商品活动倒计时
2015/10/16 Javascript
JS+CSS实现的竖向简洁折叠菜单效果代码
2015/10/22 Javascript
JavaScript获取短信验证码(周期性)
2016/12/29 Javascript
使用Require.js封装原生js轮播图的实现代码
2017/06/15 Javascript
vue-router项目实战总结篇
2018/02/11 Javascript
小程序使用分包的示例代码
2020/03/23 Javascript
vue制作抓娃娃机的示例代码
2020/04/17 Javascript
Python脚本实现代码行数统计代码分享
2015/03/10 Python
Python中安装easy_install的方法
2018/11/18 Python
python把ipynb文件转换成pdf文件过程详解
2019/07/09 Python
python按行读取文件并找出其中指定字符串
2019/08/08 Python
python实现低通滤波器代码
2020/02/26 Python
Python过滤掉numpy.array中非nan数据实例
2020/06/08 Python
Python pymsql模块的使用
2020/09/07 Python
社区版pycharm创建django项目的方法(pycharm的newproject左侧没有项目选项)
2020/09/23 Python
Django自定义YamlField实现过程解析
2020/11/11 Python
Html5剪切板功能的实现代码
2018/06/29 HTML / CSS
CSS3 画基本图形,圆形、椭圆形、三角形等
2016/09/20 HTML / CSS
水果连锁超市创业计划书
2014/01/24 职场文书
2014年小学教学工作总结
2014/11/13 职场文书
全陪导游词开场白
2015/05/29 职场文书
《春酒》教学反思
2016/02/22 职场文书
七年级作文之英语老师
2019/10/28 职场文书
MySQL CHAR和VARCHAR该如何选择
2021/05/31 MySQL