python中的定時器
阿新 • • 發佈:2018-12-29
一、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()