一、定时器控件
在 PySide6 中,如果需要周期性地执行某项操作,就可以使用 QTimer 类实现。QTimer
类表示计时器,它可以定期发射 timeout
信号,执行与信号连接的槽函数,实现自动完成某些功能。时间间隔的长度可以在 start()
方法中指定,以毫秒为单位。如果需要停止定时器,则需要使用 stop()
方法。
我们可以在终端中使用 pip 安装 pyside6 模块。
pip install pyside6
用 QTimer 类创建实例对象的方法如下:
QTimer(parent:QWidget=Noone)
其中,parent 是 窗口 或者 容器 类控件。QTimer 是不可见的,当父类删除时,定时器也同时删除。
定时器的常用方法如下:
# 实例方法
setInterval(msec:int) -> None # 设置信号发送的时间间隔,单位毫秒
interval() -> int # 获取信号发送的时间间隔,单位毫秒
isActive() -> bool # 判断信号是否激活
remainingTime() -> int # 获取据下次发送信号的时间,单位毫秒
setSingleShot(singleShot:bool) -> None # 设置定时器是否为单次发送
isSingleShot() -> bool # 获取定时器是否为单次发送
setTimerType(atype:int) -> None # 设置定时器的类型
timerType() -> int # 获取定时器的类型
timerId() -> int # 获取定时器的ID# 槽方法
start() -> None # 启动定时器
start(msec:int) -> None # 经过msec毫秒后启动定时器
stop() -> None # 停止定时器# 静态方法
singleShot(arg__1:int, Callable) -> None # 经过msec毫米后,执行 调用Python的可执行函数Callable
singleShot(msec:int, receiver:QObject, member:bytes) -> None # 经过msec毫米后,执行 receiver的槽函数member
singleShot(msec:int, timerType:Qt.TimerType, receiver:QObject, member:bytes) -> None # 经过msec毫米后,执行 receiver的槽函数member
使用定时器的步骤一般是先建立定时器对象,用 setInterval(int)
方法设置定时器发送信号的时间间隔,然后将定时器的信号 imeout
与某个槽函数关联,最后用 start() 方法启动定时器。如果只需要定时器发送 1 次信号,可以设置 setSingleShot(bool)
为 True,否则将会连续不断地发送信号,可以用 stop() 方法停止定时器信号的发送。如果只是 1 次发送信号,也可以不用创建定时器对象,用定时器类的静态方法 singleShot()
直接连接某个控件的槽函数。如果定义了多个定时器,可以用 timeId()
方法获取定时器的编号。
定时器的精度与系统和硬件有关,用 setTimerType(Qt.TimerType)
方法可以设置定时器的精度,其中参数 Qt.TimerType 的取值如下:
Qt.TimerType.PreciseTimer # 精确的定时器,保持1毫秒精度
Qt.TimerType.CoarseTimer # 精确度差的定时器,精度保持在时间间隔的5%范围内
Qt.TimerType.VeryCoarseTimer # 精度度非常差的定时器,精度是500毫秒
定时器只有一个信号 timeout()
,每经过固定的时间间隔发送一次信号,或者只发送一次信号。
timeout() # 定时时间到发射信号
import sysfrom PySide6.QtWidgets import QApplication, QWidget
from PySide6.QtCore import QTimerclass MyWidget(QWidget):def __init__(self):super().__init__()self.count = 0# 1.创建一个定时器对象self.timer = QTimer()# 2.启动定时器self.timer.start(1000)# 3.关联信号self.timer.timeout.connect(self.print_text)def print_text(self):self.count += 1if self.count <= 10:print(self.count)else:print("定时任务结束")# 关闭定时器self.timer.stop()# 退出程序sys.exit()if __name__ == "__main__":# 1.创建一个QApplication类的实例app = QApplication(sys.argv)# 2.创建一个窗口window = MyWidget()# 3.进入程序的主循环并通过exit()函数确保主循环安全结束sys.exit(app.exec())