PyQt5定时器

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jeekmary/article/details/88756702

想必大家都知道呢定时器的功能,就是在固定的一段时间内执行一段逻辑,下面我们来一起分析下,首先看一段代码

# 自定义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_())

展开阅读全文

没有更多推荐了,返回首页