目錄
1、QCalendar月曆類
2、QDateTimeEdit時間類
QCalendar是一個月曆控件,它提供了一個基于月份的視圖,允許使用者通過滑鼠或鍵盤選擇日期,預設選中的是今天的日期。也可以對月曆的日期範圍進行規定。
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5SYlRTMykjY0UTYkNGMhJmY2UWZ0IWM1UDM5QWMxQDZ18CX5d2bs92Yl1iclB3bsVmdlR2LcNWaw9CXt92Yu4GZjlGbh5yYjV3Lc9CX6MHc0RHaiojIsJye.png)
Qt Company中月曆元件效果
QCalendar類中的常用方法如下表所示:
示例中有月曆控件和标簽控件,目前標明的日期顯示在标簽控件中。建立QCalendarWidget元件,并設定該月曆控件的最大日期和最小日期。從視窗元件中標明一個日期,會發射一個QCore.QDate信号,将此信号連接配接到使用者定義的showDate()槽函數。通過調用selectedDate()方法檢索所標明的日期,然後将日期對象轉換為指定格式字元串并将其設定為标簽控件内容。
實作代碼如下所示:
import sys
from PyQt5 import QtCore
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from PyQt5.QtCore import QDate
class 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_())
QDateTimeEdit是一個允許使用者編輯日期時間的控件,可以使用鍵盤和上、下箭頭按鈕來增加或減少日期時間值。
Qt Company中時間元件效果
QDateTimeEdit類中的常用方法如下表所示:
QDateTimeEdit類中的常用信号如下表所示:
QDateTimeEdit類中包含QDateEdit類和QTimeEdit類,QDateEdit類用來編輯控件的日期,僅包括年、月和日;QTimeEdit用來編輯控件的時間,僅包括小時、分鐘和秒。
不要用QDateEdit類來設定或擷取時間,也不要用QTimeEdit類來設定或擷取日期。如果要同時操作日期時間,請使用QDateTimeEdit類。
設定彈出月曆時要注意:用來彈出月曆的類隻有QDateTimeEdit類和QDateEdit類,而QTimeEdit類雖然在文法上可以設定彈出月曆,但不起作用。
在預設情況下,如果QDateTimeEdit類構造時不指定日期時間,那麼系統會為其設定一個和本地相同的日期時間格式,并且值為2000年1月1日0時0分0秒,也可以手動指定控件顯示的日期時間。
通過示例了解QDateTimeEdit時間類,示例效果如下所示:
在這個例子中有QDateTimeEdit控件和按鈕控件,當單擊“獲得日期和時間"按鈕時,會獲得目前的日期和時間。
import sys
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from PyQt5.QtCore import QDate, QDateTime , QTime
class 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")
# 設定最小日期
self.dateEdit.setMinimumDate(QDate.currentDate().addDays(-365))
# 設定最大日期
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)
# 日期發生改變時執行
def onDateChanged(self , date):
print(date)
# 無論日期還是時間發生改變,都會執行
def onDateTimeChanged(self , dateTime ):
print(dateTime)
# 時間發生改變時執行
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_())