PyQt5 QThread倒计时功能的实现代码
作者:mtjmtj7啊 发布时间:2021-08-02 06:00:28
标签:PyQt5,QThread,倒计时
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_())
来源:https://blog.csdn.net/mtjmtj7a/article/details/115344685


猜你喜欢
- 背景:Email地址存于MSSql一用户信息表中,数量上万。公司自有服务器,集SMTP,POP3,WWW,FTP,MSSql,DNS等多种服
- 所谓定时器,是指间隔特定时间执行特定任务的机制。几乎所有的编程语言,都有定时器的实现。比如,Java有util.Timer和util.Tim
- 前言特点:在双主配置中,两台mysql互为主从节点。节点A是节点B的master,同时节点B也是节点A的master。安装mysql步骤略过
- 一、环境准备python3.6.7Pycharm二、创建项目我这里是在Django项目中新建了个APP,目录结构如下图所示:那么怎么在已有的
- 对比测试 scipy.misc 和 PIL.Image 和 libtiff.TIFF 三个库输入:1. (读取矩阵) 读入uint8、uin
- 用于制作自动化微信聊天图片,通过图片生成段子视频根据一个txt文档input.txtL 一路走过来好热啊
- 引言 近期公司vue前端项目需求:实现弹窗的拖拽,四边拉伸及对角线拉伸,以及弹窗边界处理
- OpenCV函数原型:cv2.resize(InputArray src, OutputArray dst, Size, fx, fy, i
- 搜索引擎是通过分析网页源代码来分析页面文本信息的逻辑性,所以在编写网页代码的时候一定要尽可能使用合适的标签来体现文本表达的层次感,也即是让搜
- 在 Python 中也可以像 gcc/gdb 那样调试程序,只要在运行 Python 程序时引入 pdb 模块(假设要调试的程序名为 d.p
- 如下所示:# -*- coding:utf-8 -*-class Solution: # matrix类型为二维列表,需要返回列
- rss.asp格式的 下面代码保存为rss.asp 代码如下:<!--#include file="conn.as
- 在网上找了各种安装教程,都没有在python3下安装nltk,于是我自己尝试着安装,算是成功了1、首先,假设你的python3已经安装好,并
- 现在有很多的项目,对计数器的实现甚是随意,比如在实现网站文章点击数的时候,是这么设计数据表的,如:”article_id, article_
- 01 Go中的泛型是什么众所周知,Go是一门静态类型的语言。静态类型也就意味着在使用Go语言编程时,所有的变量、函数参数都需要指定具体的类型
- 在HTML中,我们设置border=”1″ 时,表格边框实际大小是2px,那如果我们要做成1px的细线表格要怎么办?以前在做1px的表格的时
- 自定义求导:(近似求导数的方法)让x向左移动eps得到一个点,向右移动eps得到一个点,这两个点形成一条直线,这个点的斜率就是x这个位置的近
- easy_install 卸载通过easy_install 安装的模块可以直接通过 easy_install -m Packag
- // 执行AJAX请求的通用函数//带一个参数,是包含一系列选项的对象function ajax(options){//如果用户没有提供某个
- 一、前言进程,一个新鲜的字眼,可能有些人并不了解,它是系统某个运行程序的载体,这个程序可以有单个或者多个进程,一般来说,进程是通过系统CPU