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制作获取网站目录的图形化程序
May 04 Python
Python实现处理管道的方法
Jun 04 Python
深入讲解Python函数中参数的使用及默认参数的陷阱
Mar 13 Python
Python爬虫爬验证码实现功能详解
Apr 14 Python
利用aardio给python编写图形界面
Aug 21 Python
numpy 计算两个数组重复程度的方法
Nov 07 Python
对python 多个分隔符split 的实例详解
Dec 20 Python
Python 获取项目根路径的代码
Sep 27 Python
python清空命令行方式
Jan 13 Python
使用Python三角函数公式计算三角形的夹角案例
Apr 15 Python
python列表的逆序遍历实现
Apr 20 Python
python小程序之4名牌手洗牌发牌问题解析
May 15 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中输出转义JavaScript代码的实现代码
2011/04/22 PHP
Yii2.0 模态弹出框+ajax提交表单
2016/05/22 PHP
CI框架AR数据库操作常用函数总结
2016/11/21 PHP
PHP获取文件扩展名的方法实例总结
2017/06/10 PHP
深入学习微信网址链接解封的防封原理visit_type
2019/08/15 PHP
arguments对象
2006/11/20 Javascript
JavaScript脚本语言在网页中的简单应用
2007/05/13 Javascript
javascript 打印内容方法小结
2009/11/04 Javascript
精心挑选的12款优秀的基于jQuery的手风琴效果插件和教程
2012/08/22 Javascript
js向上无缝滚动,网站公告效果 具体代码
2013/11/18 Javascript
JQuery页面的表格数据的增加与分页的实现
2013/12/10 Javascript
JavaScript使用指针操作实现约瑟夫问题实例
2015/04/07 Javascript
js+css实现超简洁的二级下拉菜单效果代码
2015/09/07 Javascript
BootStrap中的table实现数据填充与分页应用小结
2016/05/26 Javascript
jquery仿苹果的时间/日期选择效果
2017/03/08 Javascript
jQuery.ajax向后台传递数组问题的解决方法
2017/05/12 jQuery
vue+vuex+axios+echarts画一个动态更新的中国地图的方法
2017/12/19 Javascript
关于vue-router的那些事儿
2018/05/23 Javascript
浅谈angularJS2中的界面跳转方法
2018/08/31 Javascript
vue实现自定义日期组件功能的实例代码
2018/11/06 Javascript
jQuery分组选择器简单用法示例
2019/04/04 jQuery
利用JavaScript模拟京东按键输入功能
2020/12/01 Javascript
如何使用原生Js实现随机点名详解
2021/01/06 Javascript
python中的内置函数getattr()介绍及示例
2014/07/20 Python
python使用in操作符时元组和数组的区别分析
2015/05/19 Python
python中正则的使用指南
2016/12/04 Python
浅谈Python浅拷贝、深拷贝及引用机制
2016/12/15 Python
浅谈Series和DataFrame中的sort_index方法
2018/06/07 Python
Python爬虫requests库多种用法实例
2020/05/28 Python
scrapy处理python爬虫调度详解
2020/11/23 Python
使用Python判断一个文件是否被占用的方法教程
2020/12/16 Python
用canvas画心电图的示例代码
2018/09/10 HTML / CSS
高级工程师岗位职责
2013/12/15 职场文书
师范教师专业大学生职业生涯规划范文
2014/03/02 职场文书
经济纠纷起诉状
2015/05/20 职场文书
go xorm框架的使用
2021/05/22 Golang