QCalendarWidget 日历控件
QDateTimeEdit日期时间步长调节器
描述
继承自:QWidget
功能作用
QCalendarWidget(parent: QWidget = None)
setMinimumDate(QDate date) # 通过QDate对象设置最小日期
minimumDate() -> QDate # 获取最小日期,返回QDate对象
setMaximumDate(QDate date) # 通过QDate对象设置最大日期
maximumDate() -> QDate # 获取最大日期,返回QDate对象
setDateRange(QDate min, QDate max) # 通过QDate对象设置日期范围
setDateEditEnabled(bool enable) # 设置日历控件是否可以通过键盘编辑
isDateEditEnabled() -> bool # 判断日历控件是否可以被编辑
setDateEditAcceptDelay(int delay) # 设置通过键盘编辑后控件的响应时间(毫秒)
dateEditAcceptDelay() -> int # 获取通过键盘编辑后控件的响应时间(毫秒)
monthShown() -> int # 获取当前显示的月,返回int类型数据
yearShown() -> int # 获取当前显示的年,返回int类型数据
selectedDate() -> QDate # 获取被选中的日期,返回QDate对象
setNavigationBarVisible(bool) # 设置是否显示顶部导航条(顶部操作年、月的工具栏)
isNavigationBarVisible() -> bool # 判断是否显示顶部导航条
setFirstDayOfWeek(Qt.DayOfWeek dayOfWeek) # 设置控件每周的第一天为星期几
firstDayOfWeek() -> Qt.DayOfWeek # 获取控件每周的第一天是星期几
# 参数:Qt.DayOfWeek
# Qt.Sunday # 星期日
# Qt.Monday # 星期一
# Qt.Tuesday # 星期二
# Qt.Wednesday # 星期三
# Qt.Thursday # 星期四
# Qt.Friday # 星期五
# Qt.Saturday # 星期六
setGridVisible(bool) # 设置控件是否显示网格
isGridVisible() -> bool # 判断控件是否显示网格
setHeaderTextFormat(QTextCharFormat format) # 通过QTextCharFormat对象设置水平头和垂直头字体格式
headerTextFormat() -> QTextCharFormat # 获取水平头和垂直头字体格式,返回QTextCharFormat对象
setHorizontalHeaderFormat(QCalendarWidget.HorizontalHeaderFormat format) # 设置水平头显示格式
horizontalHeaderFormat() -> QCalendarWidget.HorizontalHeaderFormat # 获取水平头显示格式
# 参数:QCalendarWidget.HorizontalHeaderFormat
# QCalendarWidget.SingleLetterDayNames # 英文:M/中文:周
# QCalendarWidget.ShortDayNames # 英文:Mon/中文:周一
# QCalendarWidget.LongDayNames # 英文:Monday/中文:星期一
# QCalendarWidget.NoHorizontalHeader # 水平头部显示
setVerticalHeaderFormat(QCalendarWidget.VerticalHeaderFormat format) # 设置垂直头显示格式
verticalHeaderFormat() -> QCalendarWidget.VerticalHeaderFormat # 获取垂直头显示格式
# 参数:QCalendarWidget.VerticalHeaderFormat
# QCalendarWidget.ISOWeekNumbers # 标题显示ISO周数(一年的第几周),如QDate.weekNumber()所述。
# QCalendarWidget.NoVerticalHeader # 垂直头部显示
setWeekdayTextFormat(self, Qt.DayOfWeek, QTextCharFormat) # 设置每周的某一天(星期几)字体显示格式
weekdayTextFormat(Qt.DayOfWeek dayOfWeek) -> QTextCharFormat # 获取每周的某一天(星期几)字体显示格式
setDateTextFormat(QDate date, QTextCharFormat format) # 设置指定某一天的字体显示格式
dateTextFormat(self, Union[QDate, datetime.date]) -> QTextCharFormat # 获取指定某一天的字体显示格式
dateTextFormat(self) -> object
setSelectedDate(QDate date) # 设置选中指定日期
setSelectionMode(QCalendarWidget.SelectionMode mode) # # 设置控件日期能否被选中(不能限制代码设置)
selectionMode() -> QCalendarWidget.SelectionMode # 获取选中模式
# 参数:QCalendarWidget.SelectionMode
# QCalendarWidget.NoSelection # 日期无法被选中
# QCalendarWidget.SingleSelection # 日期可以被选中(单个日期)
showToday() # 展示当前这一天(今天),不会选中该日期
showSelectedDate() # 展示选中的日期
showNextYear() # 展示下一年份
showPreviousYear() # 展示上一年份
showNextMonth() # 展示下一月份
showPreviousMonth() # 展示上一月份
setCurrentPage(int year, int month) # 通过年和月设置展示页
可用信号
activated(QDate date) # 只要用户按下Return或Enter键或双击日历小部件中的日期,就会发出此信号。
clicked(QDate date) # 鼠标单击有效日期时才会发出信号(无法选中日期为无效日期,不会发射该信号)
currentPageChanged(int year, int month) # 当前展示页发生改变时会发出此信号。新的一年和一个月作为参数传递。
selectionChanged() # 当前选择的日期发生改变时会发出此信号(鼠标/代码)
from PyQt5.Qt import *
import sys
class Windows(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle('QCalendarWidget-功能作用')
self.resize(500, 500)
self.widget_list()
def widget_list(self):
self.add_widget()
def add_widget(self):
cdw = QCalendarWidget(self)
cdw.resize(300, 250)
pass # 设置日期范围
# cdw.setMinimumDate(QDate(2000,1,1)) # 设置最小日期
# cdw.setMaximumDate(QDate(2099,12,31)) # 设置最大日期
# cdw.setDateRange(QDate(2020,1,1),QDate(2023,12,31)) # 设置一个日期范围
pass # 日期编辑
# cdw.setDateEditEnabled(False) # 设置日历控件不能被编辑(键盘操作)
# cdw.setDateEditAcceptDelay(1000) # 设置通过键盘编辑后控件的响应时间(毫秒)
pass # 日期获取
# 显示日期 并不等于 选中日期
print(cdw.monthShown()) # 获取当前显示月,返回Int类型数据
print(cdw.yearShown()) # 获取当前显示年,返回Int类型数据
print(cdw.selectedDate()) # 获取选中的日期,返回QDate对象
pass # 外观设置
# cdw.setNavigationBarVisible(False) # 设置是否显示头部导航栏(年、月操作工具栏)
cdw.setFirstDayOfWeek(Qt.Sunday) # 设置控件的第一天是星期几
cdw.setGridVisible(True) # 设置是否显示网格
tcf = QTextCharFormat()
tcf.setFontFamily('汉仪超级战甲W')
tcf.setFontPointSize(14)
# cdw.setHeaderTextFormat(tcf) # 通过QTextCharFormat对象设置水平头和垂直头字体格式
# cdw.setHorizontalHeaderFormat(QCalendarWidget.LongDayNames) # 设置水平头显示格式
# cdw.setVerticalHeaderFormat(QCalendarWidget.ISOWeekNumbers) # 设置垂直头显示格式
# cdw.setWeekdayTextFormat(Qt.Wednesday, tcf) # 设置每周的某一天(星期几)字体显示格式
# cdw.setDateTextFormat(QDate(2023,4,1), tcf) # 设置指定某一天的字体显示格式
# 结合自定某天设置字体格式和显示页发生改变时发射信号,可以做出日程提示
# cdw.setDateTextFormat(QDate(cdw.yearShown(), cdw.monthShown(), 22), tcf)
# def select_m(year, month):
# cdw.setDateTextFormat(QDate(year,month, 22), tcf)
#
# cdw.currentPageChanged.connect(select_m)
pass # 日期选中设置
# cdw.setSelectedDate(QDate(2023,4,6)) # 设置选中某一天
# cdw.setSelectionMode(QCalendarWidget.NoSelection) # 设置控件日期能否被选中(不能限制代码设置)
pass # 常用功能,显示页设置
def to_page_today():
cdw.showToday()
cdw.setFocus()
def to_page_nextyear():
cdw.showNextYear()
cdw.setFocus()
def to_page_previousyear():
cdw.showPreviousYear()
cdw.setFocus()
def to_page_nextmonth():
cdw.showNextMonth()
cdw.setFocus()
def to_page_previousmonth():
cdw.showPreviousMonth()
cdw.setFocus()
def to_page_currentpage():
cdw.setCurrentPage(2025,1)
cdw.setFocus()
btn1 = QPushButton('今天', self)
btn1.move(cdw.width() + 10, 20)
btn2 = QPushButton('下一年', self)
btn2.move(btn1.x(),btn1.y()+30)
btn3 = QPushButton('上一年', self)
btn3.move(btn1.x(), btn2.y() + 30)
btn4 = QPushButton('下一月', self)
btn4.move(btn1.x(),btn3.y()+30)
btn5 = QPushButton('上一月', self)
btn5.move(btn1.x(), btn4.y() + 30)
btn6 = QPushButton('跳转到...', self)
btn6.move(btn1.x(), btn5.y() + 30)
btn1.clicked.connect(to_page_today)
btn2.clicked.connect(to_page_nextyear)
btn3.clicked.connect(to_page_previousyear)
btn4.clicked.connect(to_page_nextmonth)
btn5.clicked.connect(to_page_previousmonth)
btn6.clicked.connect(to_page_currentpage)
if __name__ == '__main__':
app = QApplication(sys.argv)
window = Windows()
window.show()
sys.exit(app.exec_())
from PyQt5.Qt import *
import sys
class Windows(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle('QCalendarWidget-可用信号')
self.resize(500, 500)
self.widget_list()
def widget_list(self):
self.add_widget()
def add_widget(self):
cdw = QCalendarWidget(self)
# activated(QDate date) # 只要用户按下Return或Enter键或双击日历小部件中的日期,就会发出此信号。
# clicked(QDate date) # 鼠标单击有效日期时才会发出信号(无法选中日期为无效日期,不会发射该信号)
# currentPageChanged(int year, int month) # 当前展示页发生改变时会发出此信号。新的一年和一个月作为参数传递。
# selectionChanged() # 当前选择的日期发生改变时会发出此信号(鼠标/代码)
# cdw.setSelectionMode(QCalendarWidget.NoSelection)
cdw.activated.connect(lambda date:print('选中了日期:',date))
cdw.clicked.connect(lambda date: print('点击了:', date))
cdw.currentPageChanged.connect(lambda year,month: print(f'当前显示是{year}年{month}月'))
cdw.selectionChanged.connect(lambda :print('当前选择的日期发生了改变'))
cdw.setSelectedDate(QDate(2023,4,1))
if __name__ == '__main__':
app = QApplication(sys.argv)
window = Windows()
window.show()
sys.exit(app.exec_())