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单线程实现多个定时器示例
Mar 30 Python
讲解Python中的标识运算符
May 14 Python
Python环境变量设置方法
Aug 28 Python
Python读取word文本操作详解
Jan 22 Python
用TensorFlow实现戴明回归算法的示例
May 02 Python
python for 循环获取index索引的方法
Feb 01 Python
Python中py文件转换成exe可执行文件的方法
Jun 14 Python
Python3 获取文件属性的方式(时间、大小等)
Mar 12 Python
python学习将数据写入文件并保存方法
Jun 07 Python
新手学python应该下哪个版本
Jun 11 Python
Python使用struct处理二进制(pack和unpack用法)
Nov 12 Python
python 实现的截屏工具
May 08 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
封装ThinkPHP的一个文件上传方法实例
2014/10/31 PHP
ThinkPHP模板标签eq if 中区分0,null,false的方法
2017/03/24 PHP
PHP完全二叉树定义与实现方法示例
2017/10/09 PHP
Yii2.0框架实现带分页的多条件搜索功能示例
2019/02/20 PHP
PHP微信发送推送消息乱码的解决方法
2019/02/28 PHP
javaScript - 如何引入js代码
2021/03/09 Javascript
简洁短小的 JavaScript IE 浏览器判定代码
2010/03/21 Javascript
网页防止tab键的使用快速解决方法
2013/11/07 Javascript
javascript实现网页中涉及的简易运动(改变宽高、透明度、位置)
2015/11/29 Javascript
jQuery Form 表单提交插件之formSerialize,fieldSerialize,fieldValue,resetForm,clearForm,clearFields的应用
2016/01/23 Javascript
jquery制做精致的倒计时特效
2016/06/13 Javascript
防止Node.js中错误导致进程阻塞的办法
2016/08/11 Javascript
详解Node.js中的事件机制
2016/09/22 Javascript
Javascript设计模式之装饰者模式详解篇
2017/01/17 Javascript
JavaScript实现无刷新上传预览图片功能
2017/08/02 Javascript
JS校验与最终登陆界面功能完整示例
2020/01/13 Javascript
[01:07:21]NAVI vs VG Supermajor 败者组 BO3 第二场 6.5
2018/06/06 DOTA
Python入门篇之对象类型
2014/10/17 Python
Python下使用Psyco模块优化运行速度
2015/04/05 Python
详细解析Python中的变量的数据类型
2015/05/13 Python
python3写爬取B站视频弹幕功能
2017/12/22 Python
python 内置模块详解
2019/01/01 Python
Python 使用多属性来进行排序
2019/09/01 Python
python+OpenCV实现车牌号码识别
2019/11/08 Python
python文件和文件夹复制函数
2020/02/07 Python
Python爬虫之Selenium多窗口切换的实现
2020/12/04 Python
奥地利领先的在线药房:SHOP APOTHEKE
2019/10/07 全球购物
GAZMAN官网:澳大利亚领先的男装品牌
2019/12/19 全球购物
实现向右循环移位
2014/07/31 面试题
幼儿园评语大全
2014/04/17 职场文书
数据保密承诺书
2014/06/03 职场文书
社区务虚会发言材料
2014/10/20 职场文书
护士2015年终工作总结
2015/04/29 职场文书
创业计划书之甜品店
2019/09/18 职场文书
Nginx进程调度问题详解
2021/09/25 Servers
python中的sys模块和os模块
2022/03/20 Python