QCalendar:一个日历控件,提供了一个基于月份的视图,允许用户点击鼠标选择日期,默认选中时今天的日期。
常用方法
setDateRange() | 设置日期范围供选择 |
setFirstDayOfWeek() | 重新设置星期的第一天,默认时星期日 Qt.Monday Qt.Tuesday Qt.Wednesday Qt.Thursday Qt.Friday Qt.Saturday Qt.Sunday |
setMinimumDate() | 设置最小日期 |
setMaximumDate() | 设置最大日期 |
setSelectedDate() | 设置一个QDate对象,作为日期控件所选定的日期 |
maximumDate() | 获取日历控件的最大日期 |
minimumDate() | 获取日历控件的最小日期 |
selectedDate() | 返回当前选定的日期 |
setGridvisible() | 设置日历控件是否显示网格 |
#QCalendar日历时间实例
# -*- coding: utf-8 -*-
import sys,math,os
from PyQt5 import QtCore
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
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("日历")
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:是一个允许用户编辑日期时间的控件,可使用键盘上下箭头来增加或减少日期的时间值。
两个子类 QDateEdit、QTimeEdit
- QDateEdit用来编辑控件的日期,仅包括年、月、日。设置时需要注意 :
dateEdit=QDateEdit(self)
dateEdit.setDisplayFormat("yyyy-MM-dd")
- QTimeEdit用来编辑控件的时间,时、分、秒:
timeedit=QTimeEdit(self)
timeedit.setDisplayFormat("HH:mm:ss")
常用方法
setDisplayFormat() | 设置日期时间格式 yyyy:代表年份,四位数表示 MM:代表月份取值范围为01-12 dd:代表日,取值范围 01-31 HH:代表小时,取值范围00-23 mm:代表分钟取值范围 00-59 ss:代表秒 取值范围00-59 |
setMinimumDate() | 设置控件最小日期 |
setMaximumDate() | 设置控件最大日期 |
time() | 返回编辑时间 |
date() | 返回编辑日期 |
常用信号
dateChanged | 日期改变时触发 |
dateTimeChanged | 日期时间改变时触发 |
timeChanged | 时间改变时触发 |
注:用来弹出日历的类只有QDateTimeEdit、QDateEdit
dateTimeEdit=QDateTimeEdit(self)
dateTimeEdit.setCalendarPopup(true)
dateEdit=QDateEdit(self)
dateEdit.setCalendarPopup(true)
若在初始化QDateTimeEdit时在构造函数中不指定时间,系统回味起设置一个很本地时间相同的日期时间格式且值为 2000年1月1日0时0分0秒,通过QDateTimeEdit提供的槽函数设置setDateTime()、setDate()、setTime()
dateTimeEdit=QDateTimeEdit(self)
dateTimeEdit2=QDateTimeEdit(QDateTime.currentDateTime(),self)
dateEdit=QDateTimeEdit(QDate.currentDate(),self)
timeEdit=QDateTimeEdit(QTime.currentTime(),self)
设置自定义的日期、时间格式
dateTimeEdit=QDateTimeEdit(self)
dateTimeEdit2=QDateTimeEdit(QDateTime.currentDateTime(),self)
dateEdit=QDateTimeEdit(QDate.currentDate(),self)
timeEdit=QDateTimeEdit(QTime.currentTime(),self)
#设置日期时间
dateTimeEdit.setDisplayFormat("yyyy-MM-dd HH:mm:ss")
dateTimeEdit2.setDisplayFormat("yyyy/MM/dd HH-mm-ss")
dateEdit.setDisplayFormat("yyyy.MM.dd")
timeEdit.setDisplayFormat("HH:mm:ss")
设置日期时间范围
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))
- 弹出日历
dateTimeEdit=QDateTimeEdit(QDateTime.currentDateTime(),self)
dateTimeEdit.setMinimumDate(QDate.currentDate().addDays(-365))
dateTimeEdit.setMaximumDate(QDate.currentDate().addDays(365))
dateTimeEdit.setCalendarPopup(True)
- 获取日期时间
可以通过date()、dateTime()等方法获取日期时间对象。
获取年月日可调用QDate()的year()、month()、day()
dateTime=self.dateEdit.dateTime()
maxDate=self.dateEdit.maximumDate()
minDate=self.dateEdit.minimumDate()
maxTime=self.dateEdit.maxmumTime()
minTime=self.dateEdit.minimumDateTime()
minDateTime=self.dateEdit.minimumDateTime()
#各种输出
print("dateTime=%s" % str(dateTime))
print("maxDate=%s" % str(maxDate))
print("minDate=%s" % str(minDate))
print("maxTime=%s" % str(maxTime))
print("minTime=%s" % str(minTime))
print("minDateTime=%s" % str(minDateTime))
信号槽函数
dateEdit.dateChanged.connect(self.onDateChanged)
dateEdit.dateTimeChanged.connect(self.onDateTimeChanged)
dateEdit.timeChanged.connect(sel.onTimeChanged)
槽函数
#日期发生改变时
def onDateChanged(self,date):
print(date)
#无论时日期还是时间发生改变都会执行
def onDateTimeChanged(self,dateTime):
print(dateTime)
#时间发生改变执行
def onTimeChanged(self,time) :
print(time)
#QDateTimeEdit日历时间实例
# -*- coding: utf-8 -*-
import sys,math,os
from PyQt5 import QtCore
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
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,tiem):
print(tiem)
def onButtonClick(self):
dateTime=self.dateEdit.dateTime()
maxDate = self.dateEdit.maximumDate()
minDate = self.dateEdit.minimumDate()
maxTime = self.dateEdit.maximumTime()
minTime = self.dateEdit.minimumTime()
minDateTime = self.dateEdit.minimumDateTime()
maxDateTime = self.dateEdit.maximumDateTime()
# 各种输出
print("\n 选择日期时间")
print("dateTime=%s" % str(dateTime))
print("maxDate=%s" % str(maxDate))
print("minDate=%s" % str(minDate))
print("maxTime=%s" % str(maxTime))
print("minTime=%s" % str(minTime))
print("maxDateTime=%s" % str(maxDateTime))
print("minDateTime=%s" % str(minDateTime))
if __name__=="__main__":
app=QApplication(sys.argv)
demo=DateTimeEditDemo()
demo.show()
sys.exit(app.exec_())