用Python開發計時器程式

程式設計師小城發表於2019-03-16

圖形介面

首先,我們使用 Qt Designer 來設計計時器圖形介面,參考如下:左邊畫三個按鈕,分別命名為:開始、暫停、清零。右邊畫一個標籤,文字內容為空。當然,你也可以直接匯入我提供的 Ui_timer.py 檔案,然後編寫其他部分程式碼。

QTimer 介紹

QTimer 類提供了一次性和可供重複使用的定時器。要使用這個介面,我們首先要建立一個 QTimer 物件,並將 timeout 訊號繫結到指定的函式上,接著呼叫QTimer 物件的 start 方法。這樣,定時器就會以你設定的時間間隔恆定地發出 timeout 訊號。

QTimer.start(ms) 方法,用於啟動或重啟計時器,ms 引數是時間間隔,單位是毫秒。QTimer.timeout.connect(method) 將定時器與方法繫結,當超過定時器設定的時間,就會呼叫該方法。

示例:

核心模組

下面是總體的程式碼結構,包括類的屬性及方法:

showTime 是之前提到的 QTimer.timeout.connect 函式所繫結的方法,只要定時器超時,就會呼叫這個函式。這個函式的作用是顯示計時器的時間。

計時器的時間公式:當前時間 - 初始時間 - 暫停時間,這裡關鍵的一步就是要計算暫停時間。所以,我們還需要兩個類屬性 self._pause_time 和 self._restart_time,分別表示暫停計時器那一刻的時間和再次啟動計時器那一刻的時間,兩個時間相減就得到總共暫停的時間。每當計時器暫停一次,self._pause_total 屬性就要加上新的暫停時間。

convert 函式,為自定義的函式,把得到的單位為秒的時間轉換成小時、分鐘和秒三個部分,並返回格式化的字串。int 充當向下取整的作用,注意這裡不能使用 round 或者 math.ceil 等向上取整的函式,否則會出現兩次 60 秒。

下面是三個按鈕分別繫結的函式。

開始按鈕繫結 startTimer 函式, self._current_time 相當於 time.time 也就是當前時間。如果第一次啟動或者清零後的啟動,就要初始化計時器啟動時間 self._start_time。如果是暫停後的啟動,就要更新 計時器重啟時間 self._restart_time。之後,設定按鈕的狀態。

暫停按鈕繫結 pauseTimer 函式。這個函式主要負責更新self._pause_flag,並記錄暫停計時器這一刻的時間,並停止向定時器傳送訊號。也就說,這時就不再執行函式 showTime。最後,設定按鈕狀態。

清零按鈕負責恢復至初始狀態。

樣式設定

成品展示:

將 label 設定為黑底白字, 字型大小為: 50px,加粗。

設定按鈕狀態,pushButton.setEnabled(boolen) 設定按鈕是否可以點選,預設清零按鈕不可點選。* 表示僅限關鍵字引數,必須通過關鍵字傳參,不能通過位置引數傳參。

初始化設定:

最後,我們可以使用 pyinstaller -w -i timer.ico First_window.py 命令生成 exe 檔案。

相關文章