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 01 Python
pycharm 使用心得(九)解决No Python interpreter selected的问题
Jun 06 Python
python通过shutil实现快速文件复制的方法
Mar 14 Python
在Python的Bottle框架中使用微信API的示例
Apr 23 Python
python开发之thread线程基础实例入门
Nov 11 Python
实例讲解Python中global语句下全局变量的值的修改
Jun 16 Python
全面了解Nginx, WSGI, Flask之间的关系
Jan 09 Python
Python实现的自定义多线程多进程类示例
Mar 23 Python
解决安装python库时windows error5 报错的问题
Oct 21 Python
django之从html页面表单获取输入的数据实例
Mar 16 Python
python 三种方法提取pdf中的图片
Feb 07 Python
python数字图像处理:图像的绘制
Jun 28 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 auth_http类库进行身份效验
2009/03/19 PHP
php中替换字符串中的空格为逗号','的方法
2014/06/09 PHP
CI框架中site_url()和base_url()的区别
2015/01/07 PHP
PHP实现的浏览器检查类
2016/04/11 PHP
利用php_imagick实现复古效果的方法
2016/10/18 PHP
jquery 子窗口操作父窗口的代码
2009/09/21 Javascript
兼容主流浏览器的jQuery+CSS 实现遮罩层的简单代码
2014/10/14 Javascript
jQuery实现textarea自动增长宽高的方法
2015/12/18 Javascript
json格式的javascript对象用法分析
2016/07/04 Javascript
JS+HTML5实现上传图片预览效果完整实例【测试可用】
2017/04/20 Javascript
JavaScript之map reduce_动力节点Java学院整理
2017/06/29 Javascript
js指定步长实现单方向匀速运动
2017/07/17 Javascript
详解vue-router 命名路由和命名视图
2018/06/01 Javascript
关于layui toolbar和template的结合使用方法
2019/09/19 Javascript
JavaScript基于SVG的图片切换效果实例代码
2020/12/15 Javascript
在Mac OS上部署Nginx和FastCGI以及Flask框架的教程
2015/05/02 Python
python批量提取word内信息
2015/08/09 Python
Python简单遍历字典及删除元素的方法
2016/09/18 Python
Python中文编码知识点
2019/02/18 Python
Python 使用 attrs 和 cattrs 实现面向对象编程的实践
2019/06/12 Python
使用OpenCV circle函数图像上画圆的示例代码
2019/12/27 Python
详解Django3中直接添加Websockets方式
2020/02/12 Python
Tensorflow之MNIST CNN实现并保存、加载模型
2020/06/17 Python
Python实现自动装机功能案例分析
2020/10/22 Python
详解pandas中利用DataFrame对象的.loc[]、.iloc[]方法抽取数据
2020/12/13 Python
探索HTML5本地存储功能运用技巧
2016/03/02 HTML / CSS
挪威太阳镜和眼镜网上商城:SmartBuyGlasses挪威
2016/08/20 全球购物
Lulu & Georgia官方网站:购买地毯、家具、抱枕、壁纸、床上用品等
2018/03/19 全球购物
德国药房apodiscounter中文官网:德国排名前三的网上药店
2019/06/03 全球购物
东方通信股份有限公司VC面试题
2014/08/27 面试题
法制宣传日活动总结
2014/04/29 职场文书
Python基础教程,Python入门教程(超详细)
2021/06/24 Python
nginx安装以及配置的详细过程记录
2021/09/15 Servers
据Python爬虫不靠谱预测可知今年双十一销售额将超过6000亿元
2021/11/11 Python
python 中的jieba分词库
2021/11/23 Python
Vue的列表之渲染,排序,过滤详解
2022/02/24 Vue.js