PyQt5中QDeadlineTimer异常求助:remainingTime返回0且hasExpired为True
QDeadlineTimer返回0且立即过期的问题解决
你的代码中QDeadlineTimer刚创建就返回remainingTime()=0且hasExpired()=True,核心原因是直接传入整数的相对时间构造方式在部分PyQt5环境中可能出现解析异常,导致截止时间被错误设置为过去的时刻。
修正方案
可以改用以下两种可靠的方式构造QDeadlineTimer:
方式1:基于绝对时间构造
通过当前时间加上指定毫秒数来生成截止时间:
from PyQt5.QtCore import QDeadlineTimer, QDateTime import time current_time = QDateTime.currentDateTime() deadline = QDeadlineTimer(current_time.addMSecs(1000)) print(f"deadline.remainingTime(): {deadline.remainingTime()}") print(f"has expired: {deadline.hasExpired()}") time.sleep(0.5) print(f"deadline.remainingTime(): {deadline.remainingTime()}")
方式2:先创建空实例再添加相对时间
先初始化空的QDeadlineTimer,再通过addMSecs()方法设置过期时长:
from PyQt5.QtCore import QDeadlineTimer import time deadline = QDeadlineTimer() deadline.addMSecs(1000) print(f"deadline.remainingTime(): {deadline.remainingTime()}") print(f"has expired: {deadline.hasExpired()}") time.sleep(0.5) print(f"deadline.remainingTime(): {deadline.remainingTime()}")
补充说明
QDeadlineTimer的remainingTime()会在截止时间已过时返回0,hasExpired()返回True。上述两种方式通过明确指定截止时间的生成逻辑,避免了直接传整数可能出现的解析问题,能准确实现你预期的1秒过期、延迟0.5秒后剩余500毫秒的效果。
内容的提问来源于stack exchange,提问作者eklektek
相关产品推荐
相关产品推荐

