定時器是程式設計中核心功能模組之一,qt為我們提供了定時器的api,我們可以通過指定乙個控制項,每隔一段時間,執行什麼操作。
pyqt5定時器有三個型別(qt.timertype):
pyqt5主要有以下兩個個功能:
對於計時器而言,精準定時有利於我們程式的控制,但是也增加的系統的負擔,所以選擇何種型別定時器,需要在具體的專案中確定。
以下的程式示例如何建立並使用乙個定時器:
from pyqt5.qt import
*import sys
#1. 繼承object類
class
myobject
(qobject)
:#2. 定義定時器事件
deftimerevent
(selfs,evt)
:print
('定時器被觸發'
)w = qwidget(
)w.setwindowtitle(
'定時器'
)w.resize(
400,
200)
#3. 建立乙個 myobject 物件
obj = myobject(
)#4. 開啟定時器,並設定間隔為1000ms
obj.starttimer(
1000
)w.show(
)if __name__ ==
'__main__':)
)
程式演示效果如下(這裡為壓縮提及,窗體部分沒有截圖),可以看到,每隔1s,控制台就列印乙個指定的訊息:
定時器事件的方法是qobject類自帶的,但是由於我們不可能去修改庫的類,所以使用了繼承的方式來建立乙個新的類,接著,我們按自己的需求重寫了這個事件。這裡還使用了 ==obj.starttimer(1000)==來開始obj這個物件的定時器,其引數為1000,即1000ms。注意到,這裡我們沒有使用任何建立定時器的api,所以建立的操作,應該在開始定時器內部自動實現的。
上一小節使用預設的定時器型別建立並開始了乙個定時器,定時器並不一定一直執行,有時也需要關閉它,關閉定時器的函式為:killtimer(),為了能關閉指定的定時器(乙個程式可能會擁有非常多個定時器),所以每乙個定時器建立的時候都會產生乙個定時器的id,並通過starttimer()來返回,以下程式設計了乙個lable控制項,它顯示的文字由「8」開始遞減到「0」停止:
from pyqt5.qt import
*import sys
#1. 繼承qlabel類
class
mylabel
(qlabel)
:def
__init__
(self,
*args,
**kwargs)
:super()
.__init__(
*args,
**kwargs)
#2. 設定標籤的基本屬性
self.settext(
'10'
) self.move(
115,55)
self.setstylesheet(
'font-size: 30px;'
) self.settext(
'8')
#3. 開始定時器,並記錄 id
self.timer_id = self.starttimer(
1000
)#4. 重寫定時器事件
deftimerevent
(self,evt)
:#5.獲取當前秒數,
cur_sec =
int(self.text())
#將文字轉為整型,否則無法正確計算
cur_sec -=
1 self.settext(
str(cur_sec)
)#將整型轉為字串,否則無法正確顯示
#當秒數為0時候,停止定時器
if cur_sec ==0:
self.killtimer(self.timer_id)
w = qwidget(
)w.setwindowtitle(
'定時器'
)w.resize(
250,
160)
lab = mylabel(w)
w.show(
)if __name__ ==
'__main__':)
)
PyQt5之QTimer定時器
如果要在應用程式中周期性地進行某項操作,比如周期性地檢測主機的cpu值,則需要用到qtimer定時器,qtimer類提供了重複的和單次的定時器。要使用定時器,需要先建立乙個qtimer例項,將其timeout訊號連線到相應的槽,並呼叫start 然後定時器會以恆定的間隔發出timeout訊號,當視窗...
PyQt5 學習筆記
pyqt5是由一系列python模組組成。超過620個類,6000函式和方法。能在諸如unix windows和mac os等主流作業系統上執行。pyqt5有兩種證書,gpl和商業證書。pyqt5類分為很多模組,主要模組有 qtcore 包含了核心的非gui的功能。主要和時間 檔案與資料夾 各種資料...
pyqt5學習筆記 1
from pyqt5.qt import import sys 使用sys.ar 是為了讓gui程式接收到使用者傳遞的引數 建立乙個控制項,如果這個控制項沒有父控制項,那麼pyqt5會控制項加上標題等屬性,並可以設定屬性內容 這個控制項也可以叫做頂層控制項,沒有父控制項的控制項的展示需要呼叫show...