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异步回调机制实现和使用方法
Nov 26 Python
在Python操作时间和日期之asctime()方法的使用
May 22 Python
python实现搜索指定目录下文件及文件内搜索指定关键词的方法
Jun 28 Python
python Flask实现restful api service
Dec 04 Python
python看某个模块的版本方法
Oct 16 Python
对python当中不在本路径的py文件的引用详解
Dec 15 Python
如何用Python做一个微信机器人自动拉群
Jul 03 Python
解决Python安装时报缺少DLL问题【两种解决方法】
Jul 15 Python
在SQLite-Python中实现返回、查询中文字段的方法
Jul 17 Python
Python 异步协程函数原理及实例详解
Nov 13 Python
Python如何读取文件中图片格式
Jan 13 Python
python数据库开发之MongoDB安装及Python3操作MongoDB数据库详细方法与实例
Mar 18 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
安装PHP可能遇到的问题“无法载入mysql扩展” 的解决方法
2007/04/16 PHP
强烈声明: 不要使用(include/require)_once
2013/06/06 PHP
php采集神器cURL使用方法详解
2016/02/19 PHP
php实现购物车产品删除功能(2)
2020/07/23 PHP
php合并数组并保留键值的实现方法
2018/03/12 PHP
php使用fputcsv实现大数据的导出操作详解
2020/02/27 PHP
通过正则格式化url查询字符串实现代码
2012/12/28 Javascript
原生javascript和jquery判断浏览器版本等信息
2013/07/04 Javascript
jQuery中attr()方法用法实例
2015/01/05 Javascript
如何实现chrome浏览器关闭页面时弹出“确定要离开此面吗?”
2015/03/05 Javascript
JavaScript中的lastIndexOf()方法使用详解
2015/06/06 Javascript
javaScript实现滚动新闻的方法
2015/07/30 Javascript
JavaScript中的this陷阱的最全收集并整理(没有之一)
2017/02/21 Javascript
JS实现简单的浮动碰撞效果示例
2017/12/28 Javascript
nodejs基于mssql模块连接sqlserver数据库的简单封装操作示例
2018/01/05 NodeJs
vue-quill-editor富文本编辑器简单使用方法
2018/09/21 Javascript
python使用opencv进行人脸识别
2017/04/07 Python
Python实现PS滤镜的旋转模糊功能示例
2018/01/20 Python
python方向键控制上下左右代码
2018/01/20 Python
简单了解python高阶函数map/reduce
2019/06/28 Python
django rest framework vue 实现用户登录详解
2019/07/29 Python
python字典的常用方法总结
2019/07/31 Python
解决tensorboard多个events文件显示紊乱的问题
2020/02/15 Python
Python实现病毒仿真器的方法示例(附demo)
2020/02/19 Python
Kaufmann Mercantile官网:家居装饰、配件、户外及更多
2018/09/28 全球购物
英国高级健康和美容产品零售商:Life and Looks
2019/08/01 全球购物
学生实习推荐信范文
2013/11/26 职场文书
大学生优秀团员事迹材料
2014/01/30 职场文书
传播学专业毕业生自荐书
2014/07/01 职场文书
2014年后勤管理工作总结
2014/12/01 职场文书
Golang 使用Map实现去重与set的功能操作
2021/04/29 Golang
MySQL中你可能忽略的COLLATION实例详解
2021/05/12 MySQL
Vue vee-validate插件的简单使用
2021/06/22 Vue.js
Python GUI编程之tkinter 关于 ttkbootstrap 的使用详解
2022/03/03 Python
Java Spring Lifecycle的使用
2022/05/06 Java/Android
彻底弄懂Python中的回调函数(callback)
2022/06/25 Python