1. 程式人生 > >python中的定時器

python中的定時器

一、qt中使用定時器QTimer
先看效果圖

在這裡插入圖片描述

第一部分:介面設計
在這裡插入圖片描述

在這裡插入圖片描述
增加點選事件
在這裡插入圖片描述

在這裡插入圖片描述

儲存生成py檔案

第二部分:邏輯程式碼編寫

import sys
from testqt.TEST_QT_FROM import Ui_Dialog
from PyQt5.QtWidgets import QApplication
from PyQt5.QtCore import QTimer
from PyQt5.QtWidgets import QWidget
import time

class TestQtFromC(QWidget, Ui_Dialog):
def __init__(self): super(TestQtFromC, self).__init__() self.setupUi(self) def test_func(self): print("test_func running=",time.strftime("%y-%m-%d %H:%M:%S")) # 開啟定時器 def timer2(self): print("timer2 start") self.timer = QTimer(self) # 初始化一個定時器
self.timer.timeout.connect(self.test_func) # 計時結束呼叫operate()方法 self.timer.start(1000) # 設定計時間隔並啟動 1000=10S def timer_click(self): print("timer_click") self.timer2() pass if __name__ == '__main__': app = QApplication(sys.argv) mUi_Dialog = TestQtFromC(
) mUi_Dialog.show() sys.exit(app.exec_())

二、sched
準確的說,它是一個排程(延時處理機制),每次想要定時執行某任務都必須寫入一個排程。

使用sched模組實現的timer,sched模組不是迴圈的,一次排程被執行後就Over了,如果想再執行,可以使用while迴圈的方式不停的呼叫該方法

import time, sched

#被排程觸發的函式
def event_method(msg):
    print("Now-Time:", time.strftime("%y-%m-%d %H:%M:%S"), 'msg:', msg)

def run_method():
    #初始化sched模組的scheduler類
    msched = sched.scheduler(time.time, time.sleep)
    #設定一個排程,因為time.sleep()的時間是一秒,所以timer的間隔時間就是sleep的時間,加上enter的第一個引數
    msched.enter(0, 2, event_method, ("Timer-ruinging.",))
    msched.run()

def timer1():
    while True:
        #sched模組不是迴圈的,一次排程被執行後就Over了,如果想再執行,可以使用while迴圈的方式不停的呼叫該方法
        time.sleep(1)
        run_method()

if __name__ == "__main__":
    timer1()

三、Timer
Timer類也是一次性觸發的,思路和sched大概差不多

import time
import threading

threadc=None
def timer_start():
    threadc = threading.Timer(1, test_func, ("Parameter1",))
    threadc.start()
    #threadc.cancel()#可取消threadc

def test_func(msg1):
    print("I'm test_func,", msg1)
    timer_start()

def timer2():
    timer_start()
    while True:
        time.sleep(1)

if __name__ == "__main__":
    timer2()