【项目亲测有效】【python-QTimer定时器】解决同位置创建不同提示语,提示数秒后取消提示,出现与其它提示语重叠,如何解决?(多个QTimer定时器时)

在项目实现过程中,有没小伙伴遇到这样的需求,在同一个位置默认一个初始的提示语,然后根据不同的场景给出不同的提示语,触发其它提示语几秒后,再默认回到初始的提示语。(关注我主页中有帖子,教你如何实现提示语提示后若干秒后关闭/回到默认状态)

举例:登录页中有个默认的提示语:请登录!当你输入密码错误时,触发提示“密码错误”3秒后,回到初始提示语“请登录!”

最近做的项目中就有这个类似的需求,实现过程中出现个问题:提示语触发后,回到默认提示语前,会与其它情况触发的提示语重叠。(图一、图二、图三、图四)

小伙伴们可以先思考一下,到底什么原因?我们正常的思路是:初始化默认的提示,当触发提示1条件时,则展示提示1、隐藏默认提示与提示2。当触发提示2条件时,则展示提示2、隐藏默认提示与提示1。以此类推下去,需要什么就展示什么,不需要则隐藏。

一开始我的实现思路也是这样,很明确很简单,但是就出现了上述的错误。

# 非项目代码(抽出部分举例)

        if inupt_text =='': # 符合提示1

            self.tip.setVisible(False) # 默认提示语隐藏
            self.tip2.setVisible(False) # 提示2隐藏
            self.tip1.setVisible(True) # 展示提示1
            self.tip1.setText('垃圾还没填呢~~~') # 提示1设置提示语
            self.tip1_time.start(4000) # (通过设置的信号,调用定时的槽函数)
                                        # 槽函数内容为:X秒后,重新展示默认提示语

        elif len(inupt_text) > 5:  # 符合提示2

            self.tip.setVisible(False) # 默认提示语隐藏
            self.tip1.setVisible(False) # 提示1隐藏
            self.tip2.setVisible(True) # 展示提示2
            self.tip2.setText('什么垃圾名字那么长!!\n只能输入5个字哈~~')# 提示2设置提示语
            self.tip2_time.start(4000)# (通过设置的信号,调用定时的槽函数)
                                        # 槽函数内容为:X秒后,重新展示默认提示语

分析:

经过思考排查发现,当每一个提示触发后,都开启了一个定时器,定时器开启后则会一直存在。

回到问题出现的场景:

1、触发“提示1”,展示了需要的提示语(开启“提示1”的定时器,开始调用槽函数);

2、触发“提示2”,展示了需要的提示语,同一时间“提示1”的定时器中正在执行对应的槽函数(回到默认的初始页面);

所以就导致了在同时间里,“提示2”的提示语展示了、“提示1”的提示语完成了展示,通过定时器回到了“默认提示”,从而导致了重叠;(可以回看图四,重叠的内容就是“默认提示”)

(关注我主页帖子有如何设置QTimer定时器教程)

解决方法:

只要在进入判断后,在展示对应需要的提示前,停止定时器,再展示需要的提示;

self.tip2_time.stop()  # QTimer定时器停止

注意:停止的定时器中,不能停止本次判断里用到的定时器,只能停止非本次判断里使用的定时器,否则会导致无法调用定时器的槽函数,无法在对应的秒数内,回到默认提示;

# 非项目代码(抽出部分举例)
        if inupt_text =='': # 符合提示1

            '''
            解决:展示前,停止不需要用到的(提示2)的定时器,若有其它定时器一并停止,避免冲突
            '''
            self.tip2_time.stop()  # QTimer定时器停止

            self.tip.setVisible(False) # 默认提示语隐藏
            self.tip2.setVisible(False) # 提示2隐藏
            self.tip1.setVisible(True) # 展示提示1
            self.tip1.setText('垃圾还没填呢~~~') # 提示1设置提示语
            self.tip1_time.start(4000) # (通过设置的信号,调用定时的槽函数)
                                        # 槽函数内容为:X秒后,重新展示默认提示语

        elif len(inupt_text) > 5:  # 符合提示2

            '''
              解决:展示前,停止不需要用到的(提示1)的定时器,若有其它定时器一并停止,避免冲突
              '''
            self.tip1_time.stop() # QTimer定时器停止

            self.tip.setVisible(False) # 默认提示语隐藏
            self.tip1.setVisible(False) # 提示1隐藏
            self.tip2.setVisible(True) # 展示提示2
            self.tip2.setText('什么垃圾名字那么长!!\n只能输入5个字哈~~')# 提示2设置提示语
            self.tip2_time.start(4000)# (通过设置的信号,调用定时的槽函数)
                                        # 槽函数内容为:X秒后,重新展示默认提示语

如果只有一个定时器的情况下,如何解决呢?

关注我看帖子

(只有一个QTimer定时器时)【项目亲测有效】【python-pyqt-QTimer】【解决二】同位置创建不同提示语,提示数秒后取消提示,出现与其它提示语重叠,如何解决?

有疑问欢迎评论留意!!

亲测有效,制作不易,你的点赞是小菜更新的动力,点个赞加个关注吧~

关注我,分享更多项目实际案例问题,帮您解决更多问题,少走弯路!!

  • 6
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值