QCalendar是一个日历控件,它提供了一个基于月份的视图,允许用户通过鼠标或键盘选择日期,默认选中的是今天的日期。也可以对日历的日期范围进行规定。
QCalendar类中的常用方法
方法 | 描述 |
---|---|
setDataRange() | 设置日期范围供选择 |
setFirstDayOfWeek() | 重新设置星期的第一天,默认是星期日。其参数枚举值如下:Qt.Monday,星期一;Qt.Tuesday,星期二;Qt.Wednesday,星期三;Qt.Thursday,星期四;Qt.Friday,星期五;Qt.Saturday,星期六;Qt.Sunday,星期日 |
setMinimumDate() | 设置最小日期 |
setMaximumDate() | 设置最大日期 |
setSelectedDate() | 设置一个QDate对象,作为日期控件所选定的日期 |
maximumDate | 获得日历控件的最大日期 |
minimumDate | 获得日历控件的最小日期 |
selectedDate() | 返回当前选定的日期 |
setGridvisible() | 设置日历控件是否显示网格 |
案例——QCalendar的使用
import sys
from PyQt5 import QtCore
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.lb1 = QLabel(self)
date = self.cal.selectedDate()
self.lb1.setText(date.toString("yyyy-MM-dd dddd"))
self.lb1.move(20 , 300)
self.setGeometry(100 , 100 , 400 , 350)
self.setWindowTitle("Calendar案例")
def showDate(self,date):
self.lb1.setText(date.toString("yyyy-MM-dd dddd"))
if __name__ == '__main__':
from pyqt5_plugins.examples.exampleqmlitem import QtCore
QtCore.QCoreApplication.setAttribute(QtCore.Qt.AA_EnableHighDpiScaling)
app = QApplication(sys.argv)
win = CalendarExample()
win.show()
sys.exit(app.exec_())
QDateTimeEdit是一个允许用户编辑日期时间的控件,可以使用键盘和上、下箭头按钮来增加或减少日期时间值。比如,当使用鼠标选中QDateTimeEdit中的年份时,可以使用键盘上的上、下键来改变数值。
ODateTimeEdit通过setDisplavFormat()函数来设置显示的日期时间格式。
QDateTimeEdit类中的常用方法。
方法 | 描述 |
---|---|
setDisplayFormat() | 设置日期时间格式: yyyy,代表年份,用4位数表示;MM,代表月份,取值范围为01~12; dd,代表日,取值范围为0131;HH,代表小时,取值范围为00-23; mm,代表分钟,取值范围为0059;ss,代表秒,取值范围为0059; |
setMinimumDate() | 设置控件的最小日期 |
setMaximumDate() | 设置控件的最大日期 |
time() | 返回编辑的时间 |
date() | 返回编辑的日期 |
QDateTimeEdit类中的常用信号
信号 | 含义 |
---|---|
dateChanged | 当日期改变时发射此信号 |
dateTimeChanged | 当日期时间改变时发射此信号 |
timeChanged | 当时间改变时发射此信号 |
QDateTimeEdit的子类
QDateEdit和 QTimeEdit类均继承自QDateTimeEdit类,它们的许多特性和功能都由QDateTimeEdit类提供。
QWidget → QAbstractSpinBox → QDateTimeEdit → QDateEdit → QTimeEdit
设置显示格式时要注意:QDateEdit用来编辑控件的日期,仅包括年、月和日;QTimeEdit用来编辑控件的时间,仅包括小时、分钟和秒。
不要用QDateEdit来设置或获取时间,也不要用QTimeEdit来设置或获取日期。如果要同时操作日期时间,使用QDateTimeEdit。
设置弹出日历时要注意:用来弹出日历的类只有QDateTimeEdit和 QDateEdit,而 QTimeEdit类虽然在语法上可以设置弹出日历,但不起作用。
初始化QDateTimeEdit类
在默认情况下,如果 QDateTimeEdit类构造时不指定日期时间,那么系统会为其设置一个和本地相同的日期时间格式,并且值为2000年1月1日0时0分0秒。也可以手动指定控件显示的日期时间。
除了通过构造函数指定所显示的日期时间外,也可以根据QDateTimeEdit提供的槽函数来设置,比如setDate Time()、setDate()、setTime()函数。
设置日期时间格式
如果不想使用系统默认的格式,则可以通过setDisplayFormat()来自定义日期时间格式。
设置日期时间范围
dateEdit = QDateTimeEdit (QDateTime.currentDateTime (),self)
dateEdit.setDisplayFormat("yyyy-MM-dd HH:mm:ss")
#设置最小日期
dateEdit.setMinimumDate (QDate.currentDate().addDays (-365))
#设置最大日期
dateEdit.setMaximumDate (QDate.currentDate().addDays (365))
弹出日历
在默认情况下,只能通过上下箭头来改变日期时间。如果要弹出日历控件,只需调用setCalendarPopup(True)即可。
获取日期时间
可以通过 date()、 dateTime()等方法来获取日期时间对象,如果要获取年、月、日等信息,则可以调用QDate的year()、month()、day()等函数。
信号与槽函数
QDateTimeEdit控件常用的信号是dateChanged 、 dateTimeChanged 和·timeChanged,分别在改变日期、日期时间、时间时发射。
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__':
from pyqt5_plugins.examples.exampleqmlitem import QtCore
QtCore.QCoreApplication.setAttribute(QtCore.Qt.AA_EnableHighDpiScaling)
app = QApplication(sys.argv)
win = DateTimeEditDemo()
win.show()
sys.exit(app.exec_())