-
PyQt5 QCalendarWidget 概述
PyQt5是一个用于创建图形化应用程序的Python库,而QCalendarWidget是PyQt5中用于创建日历的控件。它可以被放置在窗口或对话框中以允许用户选择日期。 -
获得 QCalendarWidget 的当前日期
通过调用selectedDate()
方法,可以获得 QCalendarWidget 当前选中的日期。例如:
from PyQt5.QtWidgets import QApplication, QMainWindow, QCalendarWidget
class MyWindow(QMainWindow):
def __init__(self):
super().__init__()
cal = QCalendarWidget(self)
cal.setMinimumDate(QDate(1900,1,1))
cal.setMaximumDate(QDate(2100,1,1))
cal.setGridVisible(True)
cal.move(20, 20)
cal.clicked.connect(self.showDate)
def showDate(self, date):
print(date.toString())
if __name__ == '__main__':
app = QApplication(sys.argv)
w = MyWindow()
w.show()
sys.exit(app.exec_())
QCalendarWidget 被创建后,setMinimumDate()
和 setMaximumDate()
方法设置最小和最大日期。 如上所示,clicked
信号连接了showDate()
方法,该方法将在用户单击日历中的日期时被调用。
- 设置 QCalendarWidget 的日期
调用 setSelectedDate()
方法可设置 QCalendarWidget 的日期。例如,您可以通过以下方式将 QCalendarWidget 的日期设置为2019年11月2日:
from PyQt5.QtCore import QDate
date = QDate(2019, 11, 2)
cal.setSelectedDate(date)
- 允许 QCalendarWidget 只显示可用日期
通过指定 setDateRange()
属性限制此控件的日期范围。例如:
from PyQt5.QtCore import QDate
date = QDate(2019, 11, 2)
cal.setMaximumDate(date)
date = QDate(2021, 11, 4)
cal.setMinimumDate(date)
- 滚轮事件
滚轮事件与QCalendarWidget绑定,按下滚轮后,触发 QCalendarWidget 的下一页/上一页日期显示。例如:
from PyQt5.QtCore import QDate, Qt
from PyQt5.QtGui import QWheelEvent
from PyQt5.QtWidgets import QCalendarWidget
class MyCalendarWidget(QCalendarWidget):
def __init__(self, *args):
super().__init__(*args)
def wheelEvent(self, event: QWheelEvent) -> None:
delta = event.angleDelta().y()
date = self.selectedDate()
if delta > 0:
date = date.addMonths(-1)
else:
date = date.addMonths(1)
if date < self.minimumDate() or date > self.maximumDate():
return
self.setSelectedDate(date)
if __name__ == '__main__':
app = QApplication(sys.argv)
cal = MyCalendarWidget()
cal.setGridVisible(True)
cal.setMinimumDate(QDate(1900,1,1))
cal.setMaximumDate(QDate(2100,1,1))
cal.show()
sys.exit(app.exec_())
在上述代码中,我们自定义了QCalendarWidget的子类,并重写了 wheelEvent() 方法,该方法获取滚轮方向,并使用 addMonths() 方法来增加或减少一个月来更新选中的日期。当日期小于最小值或大于最大值时,滚动将被忽略。