Python Qt GUI設(shè)計:QCalendar日歷類和QDateTimeEdit時間類(基礎(chǔ)篇—20)
1
QCalendar日歷類
QCalendar是一個日歷控件,它提供了一個基于月份的視圖,允許用戶通過鼠標(biāo)或鍵盤選擇日期,默認(rèn)選中的是今天的日期。也可以對日歷的日期范圍進(jìn)行規(guī)定。
Qt Company中日歷組件效果
QCalendar類中的常用方法如下表所示:
通個示例了解QCalendar日歷類,示例效果如下所示:?
示例中有日歷控件和標(biāo)簽控件,當(dāng)前選定的日期顯示在標(biāo)簽控件中。創(chuàng)建QCalendarWidget組件,并設(shè)置該日歷控件的最大日期和最小日期。從窗口組件中選定一個日期,會發(fā)射一個QCore.QDate信號,將此信號連接到用戶定義的showDate()槽函數(shù)。通過調(diào)用selectedDate()方法檢索所選定的日期,然后將日期對象轉(zhuǎn)換為指定格式字符串并將其設(shè)置為標(biāo)簽控件內(nèi)容。
實現(xiàn)代碼如下所示:
import sysfrom PyQt5 import QtCorefrom PyQt5.QtGui import *from PyQt5.QtWidgets import *from PyQt5.QtCore import QDateclass CalendarExample( QWidget):def __init__(self):super(CalendarExample, self).__init__()self.initUI()def initUI(self):self.cal = QCalendarWidget(self)self.cal.setMinimumDate(QDate(1980, 1, 1))self.cal.setMaximumDate(QDate(3000, 1, 1))self.cal.setGridVisible(True)self.cal.move(20, 20)self.cal.clicked[QtCore.QDate].connect(self.showDate)self.lbl = QLabel(self)date = self.cal.selectedDate()self.lbl.setText(date.toString("yyyy-MM-dd dddd"))self.lbl.move(20, 300)self.setGeometry(100,100,400,350)self.setWindowTitle('Calendar 例子')def showDate(self, date):self.lbl.setText(date.toString("yyyy-MM-dd dddd") )if __name__ == '__main__':app = QApplication(sys.argv)demo = CalendarExample()demo.show()sys.exit(app.exec_())
2
QDateTimeEdit時間類
QDateTimeEdit是一個允許用戶編輯日期時間的控件,可以使用鍵盤和上、下箭頭按鈕來增加或減少日期時間值。

Qt Company中時間組件效果
QDateTimeEdit類中的常用方法如下表所示:
QDateTimeEdit類中的常用信號如下表所示:

QDateTimeEdit類中包含QDateEdit類和QTimeEdit類,QDateEdit類用來編輯控件的日期,僅包括年、月和日;QTimeEdit用來編輯控件的時間,僅包括小時、分鐘和秒。
不要用QDateEdit類來設(shè)置或獲取時間,也不要用QTimeEdit類來設(shè)置或獲取日期。如果要同時操作日期時間,請使用QDateTimeEdit類。
設(shè)置彈出日歷時要注意:用來彈出日歷的類只有QDateTimeEdit類和QDateEdit類,而QTimeEdit類雖然在語法上可以設(shè)置彈出日歷,但不起作用。
在默認(rèn)情況下,如果QDateTimeEdit類構(gòu)造時不指定日期時間,那么系統(tǒng)會為其設(shè)置一個和本地相同的日期時間格式,并且值為2000年1月1日0時0分0秒,也可以手動指定控件顯示的日期時間。
通過示例了解QDateTimeEdit時間類,示例效果如下所示:?
在這個例子中有QDateTimeEdit控件和按鈕控件,當(dāng)單擊“獲得日期和時間"按鈕時,會獲得當(dāng)前的日期和時間。
實現(xiàn)代碼如下所示:
import sysfrom PyQt5.QtGui import *from PyQt5.QtWidgets import *from PyQt5.QtCore import QDate, QDateTime , QTimeclass DateTimeEditDemo(QWidget):def __init__(self):super(DateTimeEditDemo, self).__init__()self.initUI()def initUI(self):self.setWindowTitle('QDateTimeEdit例子')self.resize(300, 90)vlayout = QVBoxLayout()self.dateEdit = QDateTimeEdit(QDateTime.currentDateTime(), self)self.dateEdit.setDisplayFormat("yyyy-MM-dd HH:mm:ss")# 設(shè)置最小日期self.dateEdit.setMinimumDate(QDate.currentDate().addDays(-365))# 設(shè)置最大日期self.dateEdit.setMaximumDate(QDate.currentDate().addDays(365))self.dateEdit.setCalendarPopup( True)self.dateEdit.dateChanged.connect(self.onDateChanged)self.dateEdit.dateTimeChanged.connect(self.onDateTimeChanged)self.dateEdit.timeChanged.connect(self.onTimeChanged)self.btn = QPushButton('獲得日期和時間')self.btn.clicked.connect(self.onButtonClick)vlayout.addWidget( self.dateEdit )vlayout.addWidget( self.btn )self.setLayout(vlayout)# 日期發(fā)生改變時執(zhí)行def onDateChanged(self , date):print(date)# 無論日期還是時間發(fā)生改變,都會執(zhí)行def onDateTimeChanged(self , dateTime ):print(dateTime)# 時間發(fā)生改變時執(zhí)行def onTimeChanged(self , time):print(time)def onButtonClick(self ):dateTime = self.dateEdit.dateTime()# 最大日期maxDate = self.dateEdit.maximumDate()# 最大日期時間maxDateTime = self.dateEdit.maximumDateTime()# 最大時間maxTime = self.dateEdit.maximumTime()# 最小日期minDate = self.dateEdit.minimumDate()# 最小日期時間minDateTime = self.dateEdit.minimumDateTime()# 最小時間minTime = self.dateEdit.minimumTime()print('\n選擇日期時間' )print('dateTime=%s' % str(dateTime) )print('maxDate=%s' % str(maxDate) )print('maxDateTime=%s' % str(maxDateTime) )print('maxTime=%s' % str(maxTime) )print('minDate=%s' % str(minDate) )print('minDateTime=%s' % str(minDateTime) )print('minTime=%s' % str(minTime) )if __name__ == '__main__':app = QApplication(sys.argv)demo = DateTimeEditDemo()demo.show()sys.exit(app.exec_())
往期推薦

