pyqt实现定时弹窗并跳转窗口效果

首先给出实现效果:

pyqt实现定时关闭弹窗和跳转页面

实现方法:

在需要使用的窗口类增加QTimer和QMessageBox对象,也可以放在全局里或别的类里,但需要能随时调用到这两个对象。

# 两个类的包,pyqt5应该也是在这里面,改个数字就行
from PyQt6.QtCore import QTimer
from PyQt6.QtWidgets import QMessageBox

# 这个是需要使用该功能的窗口类
class LoginWindow(QWidget, Ui_Login):
        def __init__( self, parent=None):
            super(LoginWindow, self).__init__(parent)
            self.setupUi(self)
            self.initUI()
            
            # 这两个是需要的工具对象
            self.timer = QTimer()
            self.info_box = QMessageBox()

然后在需要使用弹出并定时关闭窗口的地方加入这段代码:

try:
    # 设置info_box的详细信息,这里只设置了标题和提示文字
    title = "登录成功!"
    text = "3秒后返回登录页面"
    self.info_box.setWindowTitle(title)  # QMessageBox标题
    self.info_box.setText(text)  # QMessageBox的提示文字
    # 展示弹窗
    self.info_box.show()
    # 设置 QMessageBox 自动关闭时长
    delay = 3000
    self.timer.singleShot(delay, self.registerSuccess)  # 延时delay ms后执行self.registerSuccess函数
    # 上面的延时等待异步执行,因此在延时过程中,会继续向后执行代码
    # ...
except Exception as e:
    print(e)

这里使用了timer对象的singleShot方法,延时delay毫秒后执行传入的函数(注意延时是异步执行!延时过程中会继续向后执行),这里我设置的在注册完成后执行窗口类里的resgisterSuccess()函数。

假如只是想延时关闭弹出的窗口,那么直接将上面的self.timer.singleShot()函数改为匿名函数即可:

self.timer.singleShot(delay, lambda: self.info_box.close())

如果想在关闭弹出窗口后执行其他操作,则需要定义一个延时之后执行的函数(因为singleShot异步执行,所以不能把剩下的代码写在函数之后),这里给出我写的registerSuccess函数作为参考:

def registerSuccess(self):
    # 关闭弹出串口前要做的事
    # ...
    # 关闭弹出窗口
    self.info_box.close()
    # 关闭弹出窗口后要做的事
    self.toLogin()  # 注册完成跳转回登录页面的函数

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值