You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 18:44:53