QT中的QTimer.singleShot()函数
1. 作用
QTimer.singleShot()
是 Qt 定时器类 QTimer
提供的一个静态函数,用来在指定的时间(毫秒)后 执行一次 某个函数/槽函数。
它的典型应用场景就是:
(1)延迟执行(避免某些初始化未完成就调用)
(2)异步操作(让函数排到事件循环中稍后执行)
()定时触发(比如 2000 毫秒后执行某个任务)
2. 函数原型
在 PyQt5 里,常见的两种用法是:
QTimer.singleShot(msec: int, receiver: QObject, member: SLOT)
QTimer.singleShot(msec: int, callable)
参数解释
msec
:延时的毫秒数(整数,1000 = 1 秒)。receiver
/member
:Qt 的信号槽写法,触发时调用某个对象的槽函数。callable
:Python 风格,传入一个可调用对象(函数、lambda 等)。
3. 用法示例
最常见的 Python 写法
from PyQt5.QtWidgets import QApplication, QPushButton
from PyQt5.QtCore import QTimerapp = QApplication([])button = QPushButton("Click me")# 点击按钮时输出
button.clicked.connect(lambda: print("按钮被点击了!"))button.show()# 2 秒后自动点击按钮
QTimer.singleShot(2000, button.click)app.exec_()
输出:
按钮被点击了!
当执行函数后,两秒后会自行点击关联的按钮,输出关联的按钮结果。
4. 特点
(1)一次性定时器:
只会执行一次,如果需要循环执行,要用 QTimer.start()
。
(2)依赖事件循环
必须有 QApplication.exec_()
在运行,否则不会触发。
(3)延时不一定精准
Qt 不是实时系统,1000 毫秒意味着“大约 1 秒后”,但可能受系统调度影响略有延迟。
5. 典型应用
UI 初始化后再修改界面(避免刚设置好的属性被覆盖)
QTimer.singleShot(100, lambda: plot_item.setRange(yRange=(0, 100)))
延迟关闭提示窗口
QTimer.singleShot(3000, msg_box.close)
异步操作,避免阻塞
def long_task():print("任务完成")print("准备任务")
QTimer.singleShot(0, long_task) # 把任务丢给事件循环