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进程类subprocess的一些操作方法例子
Nov 22 Python
Python入门学习之字符串与比较运算符
Oct 12 Python
Python使用dis模块把Python反编译为字节码的用法详解
Jun 14 Python
Python用threading实现多线程详解
Feb 03 Python
Python3 replace()函数使用方法
Mar 19 Python
Python selenium抓取微博内容的示例代码
May 17 Python
Python退火算法在高次方程的应用
Jul 26 Python
使用pytorch进行图像的顺序读取方法
Jul 27 Python
python中metaclass原理与用法详解
Jun 25 Python
详解Python IO口多路复用
Jun 17 Python
Python实例方法、类方法、静态方法区别详解
Sep 05 Python
属性与 @property 方法让你的python更高效
Sep 21 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
syphon 虹吸式咖啡冲泡冲煮倒水的得与失
2021/03/03 冲泡冲煮
php下防止单引号,双引号在接受页面转义的设置方法
2008/09/25 PHP
解析argc argv在php中的应用
2013/06/24 PHP
修改PHP脚本使WordPress拦截垃圾评论的方法示例
2015/12/10 PHP
Yii操作数据库实现动态获取表名的方法
2016/03/29 PHP
PHP实现的支付宝支付功能示例
2019/03/26 PHP
php和vue配合使用技巧和方法
2019/05/09 PHP
JS类定义原型方法的两种实现的区别评论很多
2007/09/12 Javascript
javascript firefox兼容ie的dom方法脚本
2008/05/18 Javascript
javascript URL锚点取值方法
2009/02/25 Javascript
javascript 浏览器判断 绑定事件 arguments 转换数组 数组遍历
2009/07/06 Javascript
ASP.NET中使用后端代码注册脚本 生成JQUERY-EASYUI的界面错位的解决方法
2010/06/12 Javascript
javascript 基础篇4 window对象,DOM
2012/03/14 Javascript
jQuery ajax dataType值为text json探索分享
2013/09/23 Javascript
自定义ExtJS控件之下拉树和下拉表格附源码
2013/10/15 Javascript
JavaScript控制输入框中只能输入中文、数字和英文的方法【基于正则实现】
2017/03/03 Javascript
jQuery图片瀑布流的简单实现代码
2017/03/15 Javascript
Vue通过input筛选数据
2020/10/26 Javascript
10个最受欢迎的 JavaScript框架(推荐)
2019/04/24 Javascript
Python中的XML库4Suite Server的介绍
2015/04/14 Python
python从网络读取图片并直接进行处理的方法
2015/05/22 Python
python定时器(Timer)用法简单实例
2015/06/04 Python
Python探索之爬取电商售卖信息代码示例
2017/10/27 Python
Python3使用SMTP发送带附件邮件
2020/06/16 Python
使用 Python 实现文件递归遍历的三种方式
2018/07/18 Python
利用Python正则表达式过滤敏感词的方法
2019/01/21 Python
python Tcp协议发送和接收信息的例子
2019/07/22 Python
Python Web框架之Django框架文件上传功能详解
2019/08/16 Python
django 数据库返回queryset实现封装为字典
2020/05/19 Python
CSS3中HSL和HSLA的简单使用示例
2015/07/14 HTML / CSS
shell程序如何生命变量?shell变量是弱变量吗?
2014/11/10 面试题
带薪年假请假条
2014/02/04 职场文书
2014镇党委班子对照检查材料思想汇报
2014/09/23 职场文书
办公室主任个人对照检查材料思想汇报
2014/10/11 职场文书
学习三严三实心得体会
2014/10/13 职场文书
MySQL 百万级数据的4种查询优化方式
2021/06/07 MySQL