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 相关文章推荐
天翼开放平台免费短信验证码接口使用实例
Dec 18 Python
Python中DJANGO简单测试实例
May 11 Python
Python中断言Assertion的一些改进方案
Oct 27 Python
基于Python闭包及其作用域详解
Aug 28 Python
Python入门之三角函数sin()函数实例详解
Nov 08 Python
Flask和Django框架中自定义模型类的表名、父类相关问题分析
Jul 19 Python
Python 绘制酷炫的三维图步骤详解
Jul 12 Python
python集合的创建、添加及删除操作示例
Oct 08 Python
Python 求数组局部最大值的实例
Nov 26 Python
Python super()方法原理详解
Mar 31 Python
Django实现celery定时任务过程解析
Apr 21 Python
Python自动登录QQ的实现示例
Aug 28 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
在线增减.htpasswd内的用户
2006/10/09 PHP
php简单实现快速排序的方法
2015/04/04 PHP
PHP判断数组是否为空的常用方法(五种方法)
2017/02/08 PHP
PHP实现求解最长公共子串问题的方法
2017/11/17 PHP
用javascript操作xml
2006/11/04 Javascript
JavaScript中的Window窗口对象
2008/01/16 Javascript
jQuery 使用手册(七)
2009/09/23 Javascript
最佳的addEvent事件绑定是怎样诞生的
2011/10/24 Javascript
JavaScript中创建类/对象的几种方法总结
2013/11/29 Javascript
jquery 插件实现瀑布流图片展示实例
2015/04/03 Javascript
javascript笛卡尔积算法实现方法
2015/04/08 Javascript
Jquery插件之Fancybox丰富的弹出层效果附源码下载
2015/12/02 Javascript
easyui中combotree循环获取父节点至根节点并输出路径实现方法
2016/11/10 Javascript
解析js如何获取css样式
2016/12/11 Javascript
javascript数据类型详解
2017/02/07 Javascript
vue2.0使用v-for循环制作多级嵌套菜单栏
2018/06/25 Javascript
JS实现checkbox互斥(单选)功能示例
2019/05/04 Javascript
如何让微信小程序页面之间的通信不再变困难
2019/06/03 Javascript
Vuex的各个模块封装的实现
2020/06/05 Javascript
[02:49]2014DOTA2电竞也是体育项目! 势要把荣誉带回中国!
2014/07/20 DOTA
python 将字符串转换成字典dict
2013/03/24 Python
requests和lxml实现爬虫的方法
2017/06/11 Python
python交互式图形编程实例(一)
2017/11/17 Python
PyQt5每天必学之事件与信号
2018/04/20 Python
PyQt5的安装配置过程,将ui文件转为py文件后显示窗口的实例
2019/06/19 Python
利用python实现短信和电话提醒功能的例子
2019/08/08 Python
如何使用python实现模拟鼠标点击
2020/01/06 Python
使用keras实现孪生网络中的权值共享教程
2020/06/11 Python
如何基于Python实现word文档重新排版
2020/09/29 Python
Python爬虫分析微博热搜关键词的实现代码
2021/02/22 Python
烹调加工管理制度
2014/02/04 职场文书
幼儿园小班评语
2014/04/18 职场文书
音乐教育专业自荐信
2014/09/18 职场文书
单位个人查摆问题及整改措施
2014/10/28 职场文书
丧事答谢词大全
2015/09/30 职场文书
Java面试题冲刺第十五天--设计模式
2021/08/07 面试题