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中的序列化存储的方法
Apr 28 Python
Python中zfill()方法的使用教程
May 20 Python
Numpy数组转置的两种实现方法
Apr 17 Python
Python高级特性切片(Slice)操作详解
Sep 27 Python
Python 移动光标位置的方法
Jan 20 Python
关于不懂Chromedriver如何配置环境变量问题解决方法
Jun 12 Python
python 实现将多条曲线画在一幅图上的方法
Jul 07 Python
在Pycharm中调试Django项目程序的操作方法
Jul 17 Python
使用keras实现孪生网络中的权值共享教程
Jun 11 Python
Python GUI库Tkiner使用方法代码示例
Nov 27 Python
详解如何使用Pytest进行自动化测试
Jan 14 Python
Python 正则模块详情
Nov 02 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中的错误处理、异常处理机制分析
2012/05/07 PHP
thinkPHP3.x常量整理(预定义常量/路径常量/系统常量)
2016/05/20 PHP
smarty模板的使用方法实例分析
2019/09/18 PHP
jquery isEmptyObject判断是否为空对象的函数
2011/02/14 Javascript
基于datagrid框架的查询
2013/04/08 Javascript
javascript相等运算符与等同运算符详细介绍
2013/11/09 Javascript
jQuery中:text选择器用法实例
2015/01/03 Javascript
JS+CSS实现模仿浏览器网页字符查找功能的方法
2015/02/26 Javascript
JavaSciprt中处理字符串之sup()方法的使用教程
2015/06/08 Javascript
XML、HTML、CSS与JS的区别整理
2016/02/18 Javascript
有关jQuery中parent()和siblings()的小问题
2016/06/01 Javascript
sencha ext js 6 快速入门(必看)
2016/06/01 Javascript
AngularJS基础 ng-keyup 指令简单示例
2016/08/02 Javascript
JS实现针对给定时间的倒计时功能示例
2017/04/11 Javascript
利用jquery去掉时光轴头尾部线条的方法实例
2017/06/16 jQuery
浅谈vue中数据双向绑定的实现原理
2017/09/14 Javascript
nuxt框架中路由鉴权之Koa和Session的用法
2018/05/09 Javascript
详解angular2 控制视图的封装模式
2018/12/27 Javascript
JS栈stack类的实现与使用方法示例
2019/01/31 Javascript
javascript简单实现深浅拷贝过程详解
2019/10/08 Javascript
electron 安装,调试,打包的具体使用
2019/11/06 Javascript
JS插件amCharts实现绘制柱形图默认显示数值功能示例
2019/11/26 Javascript
原生JS与JQ获取元素的区别详解
2020/02/13 Javascript
vue点击Dashboard不同内容 跳转到同一表格的实例
2020/11/13 Javascript
Vue 数据响应式相关总结
2021/01/28 Vue.js
python 递归遍历文件夹,并打印满足条件的文件路径实例
2017/08/30 Python
Python 如何反方向迭代一个序列
2020/07/28 Python
用HTML5的canvas实现一个炫酷时钟效果
2016/05/20 HTML / CSS
电子商务专业个人的自我评价分享
2013/10/29 职场文书
高中生自我评语大全
2014/01/19 职场文书
法人代表授权委托书
2014/04/08 职场文书
大学团日活动新闻稿
2014/09/10 职场文书
餐馆开业致辞
2015/08/01 职场文书
2016银行招聘自荐信
2016/01/28 职场文书
送给教师们,到底该如何写好教学反思?
2019/07/02 职场文书
Go语言 go程释放操作(退出/销毁)
2021/04/30 Golang