想必大家都知道呢定时器的功能,就是在固定的一段时间内执行一段逻辑,下面我们来一起分析下,首先看一段代码
# 自定义object对象,重写里面的timerEvent方法
class MyObject(QObject):
def timerEvent(self, a0: QTimerEvent):
print(a0)
print(time.time())
class Window(QWidget):
def __init__(self,*args, **kwargs):
super(Window, self).__init__(*args, **kwargs)
# 设置宽高
self.resize(600, 400)
# 窗口移动到指定位置
self.move(660,300)
# 设置标题
self.setWindowTitle("标哥测试")
# 设置logo
# self.setWindowIcon(QIcon("logo.png"))
# 初始化UI界面的控件
self.setUI()
# 初始化事件
self.initLogic()
def initLogic(self):
obj = MyObject(self)
obj.startTimer(1000)
def setUI(self):
pass
if __name__ == "__main__":
app = QApplication(sys.argv)
window = Window()
window.show()
print(window.x())
print(window.y())
sys.exit(app.exec_())
上面的代码我们发现,当我重写QObject的的timerEvent
方法时候,我们将时间和事件进行打印,之后我们再下面
obj = MyObject(self)
obj.startTimer(1000)
调用这个startTimer
传递1000表示每隔一秒执行,我们看结果
<PyQt5.QtCore.QTimerEvent object at 0x000001D2E75D2CA8>
1553305479.5729434
<PyQt5.QtCore.QTimerEvent object at 0x000001D2E75D2CA8>
1553305480.571702
<PyQt5.QtCore.QTimerEvent object at 0x000001D2E75D2CA8>
1553305481.571195
<PyQt5.QtCore.QTimerEvent object at 0x000001D2E75D2CA8>
1553305482.5721042
<PyQt5.QtCore.QTimerEvent object at 0x000001D2E75D2CA8>
1553305483.570514
<PyQt5.QtCore.QTimerEvent object at 0x000001D2E75D2CA8>
1553305484.5725768
<PyQt5.QtCore.QTimerEvent object at 0x000001D2E75D2CA8>
1553305485.5758426
<PyQt5.QtCore.QTimerEvent object at 0x000001D2E75D2CA8>
1553305486.573684
<PyQt5.QtCore.QTimerEvent object at 0x000001D2E75D2CA8>
1553305487.5730126
那么说明,我们的定时器起到了作用,那么接下来问题出现了,怎么停止这个定时器
obj_time_id = obj.startTimer(1000)
self.killTimer(obj_time_id)
我们调用killTimer
方法,将定时器创建的时候生成的对象传递进去即可
案例
实现在界面上放置一个label,初始化设置一个值,然后自动衰减,当到达0的时候,停止
代码如下:
# -*- coding: utf-8 -*-
import sys
import time
from PyQt5.QtCore import QObject, QTimerEvent
from PyQt5.QtGui import QIcon
from PyQt5.QtWidgets import QApplication, QWidget, QHBoxLayout, QPushButton, QLabel
class MyQLable(QLabel):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.move(100, 100)
self.obj_time_id = self.startTimer(1000)
def timerEvent(self, a0: QTimerEvent):
text = self.text()
num = int(text)
num -=1
self.setText(str(num))
# 当到达0的时候,杀死该定时器
if num == 0:
self.killTimer(self.obj_time_id)
def setSecNumn(self, num):
self.setText(str(num))
class Window(QWidget):
def __init__(self,*args, **kwargs):
super(Window, self).__init__(*args, **kwargs)
# 设置宽高
self.resize(600, 400)
# 窗口移动到指定位置
self.move(660,300)
# 设置标题
self.setWindowTitle("标哥测试")
# 设置logo
# self.setWindowIcon(QIcon("logo.png"))
# 初始化UI界面的控件
self.setUI()
# 初始化事件
self.initLogic()
def initLogic(self):
obj = MyQLable(self)
# 初始化传递一个值
obj.setSecNumn(8)
def setUI(self):
pass
if __name__ == "__main__":
app = QApplication(sys.argv)
window = Window()
window.show()
print(window.x())
print(window.y())
sys.exit(app.exec_())