1. 程式人生 > 其它 >PyQt5-日期時間類和介面元件

PyQt5-日期時間類和介面元件

日期時間是經常遇到的資料型別,PyQt5中日期時間相關的類有以下幾個。

其中->· QDateEdit:編輯和顯示日期的元件。若calendarPopup屬性設定為True,執行時右側按鈕變成下拉按鈕,單擊按鈕時出現一個日曆選擇框,用於在日曆上選擇日期。

設定前:

設定後:

下面是我設計的視窗介面:

下面是窗體業務邏輯類QmyWidget的完整程式碼,程式碼涉及的內容在後面各小節逐一解釋。

import sys
from PyQt5.QtWidgets import  QWidget,QApplication
from PyQt5.QtCore import QDate,QDateTime,QTime

from ui_QtApp import Ui_Form
class QmyWidget(QWidget):
    def __init__(self,parent=None):
        super().__init__(parent) #呼叫父類建構函式
        self.ui=Ui_Form() #建立UI物件
        self.ui.setupUi(self) #構造UI

    ## ====由connectSlotsByName()自動與元件的訊號關聯的槽函式=====
    def on_pushButton_clicked(self): #讀取當前日期時間
        curDateTime=QDateTime.currentDateTime()
        self.ui.timeEdit.setTime(curDateTime.time())
        self.ui.lineEdit.setText(curDateTime.toString("hh:mm:ss"))
        self.ui.dateEdit.setDate(curDateTime.date())
        self.ui.lineEdit_2.setText(curDateTime.toString("yyyy-MM-dd"))
        self.ui.dateTimeEdit.setDateTime(curDateTime)
        self.ui.lineEdit_3.setText(curDateTime.toString("yyyy-MM-dd hh:mm:ss"))

    def on_calendarWidget_selectionChanged(self): #日曆元件
        date=self.ui.calendarWidget.selectedDate()
        self.ui.lineEdit_4.setText(date.toString("yyyy年M月d日"))

    def on_pushButton_2_clicked(self):   #設定時間按鈕
        tmStr=self.ui.lineEdit.text()
        tm=QTime.fromString(tmStr,"hh:mm:ss")
        self.ui.timeEdit.setTime(tm)

    def on_pushButton_3_clicked(self):   #設定日期按鈕
        dtStr=self.ui.lineEdit_2.text()
        dt=QDate.fromString(dtStr,"yyyy-MM-dd")
        self.ui.dateEdit.setDate(dt)

    def on_pushButton_4_clicked(self):   #設定日期時間按鈕
        dttmStr=self.ui.lineEdit_3.text()
        dttm=QDateTime.fromString(dttmStr,"yyyy-MM-dd hh:mm:ss")
        self.ui.dateTimeEdit.setDateTime(dttm)

    ## =======自定義槽函式=======


if __name__ == "__main__": ##用於當前窗體測試
    app=QApplication(sys.argv) #建立GUI應用程式
    form=QmyWidget() #建立窗體
    form.show()
    sys.exit(app.exec_())

應用程式主程式appMain.py檔案如下:

## GUI應用程式主程式
import sys
from PyQt5.QtWidgets import  QApplication
from myWidget import  QmyWidget

app = QApplication(sys.argv) # 建立app,用QApplication類
myWidget = QmyWidget() #建立窗體
myWidget.show()
sys.exit(app.exec_())

最終效果如下:

日期時間資料的獲取並轉換為字串

介面上的“讀取當前日期時間”按鈕用於獲取當前日期時間並轉換為字串顯示,其槽函式是on_btnGetTime_clicked()。

程式碼中用QDateTime的類函式(也就是C++中類的靜態函式)currentDateTime()獲取當前日期時間,並賦值給變數curDateTime。然後用curDateTime變數設定介面上3個日期時間編輯器的日期或時間值,利用了QDateTime的date()和time()函式分別提取日期和時間。

其實,QTime和QDate類也有各自的類函式分別獲取當前時間和日期,類函式QTime. currentTime()返回當前時間,類函式QDate.currentDate()返回當前日期。

日期時間轉換為字串使用了QDateTime的toString()函式,分別用不同的格式顯示時間、日期、日期時間。QDateTime、QTime、QDate都有函式toString(),它們的函式引數是相同的,且遵循相同的格式規則。例如QDateTime的toString()函式的Python函式原型是:

toString(self, formatStr) -> str

它將日期時間資料按照formatStr指定的格式轉換為字串。formatStr是一個字串,包含一些特定的字元表示日期或時間的各個部分,表3-3是用於日期時間顯示的常用格式符。

在設定日期時間顯示字串格式時,還可以使用填字元,甚至使用漢字,例如,日期顯示格式可以設定為:

字串轉換為日期時間

同樣,也可以將字串轉換為QTime、QDate或QDateTime型別,這三個類都有類函式fromString(),且引數形式相同,例如QDateTime.fromString()函式原型為:

注意,類函式沒有self引數。第1個引數dateTimeStr是日期時間字串,第2個引數formatStr是字串表示的格式,按照表3-3的格式字元定義。例如:

QLineEdit的inputMask

在將字串轉換為日期時間資料時,需要字串具有指定的格式,例如圖3-5上的“設定日期”按鈕的槽函式程式碼是:

其中的dtStr是讀取的介面上一個QLineEdit元件裡的字串,這個字串需要符合日期格式“yyyy-MM-dd”,如果不符合這個格式,轉換就會出錯。

為了限定QLineEdit的輸入符合某些格式,可以設定其inputMask屬性。在設計圖3-5的窗體時,為3個顯示時間、日期、日期時間的QLineEdit元件設定了inputMask屬性。inputMask屬性的設定內容及其意義如表3-4所示,在沒有輸入任何資料時,其顯示如圖3-6所示。

這樣用inputMask屬性對輸入格式做了限制後,可以避免一些無效的輸入。inputMask屬性設定還有很多具體的格式定義,在此就不照搬幫助檔案進行介紹了,需要用到時去查Qt的幫助檔案即可。