PyQt5 QCalendarWidget 获得接受滴属性

  • Post category:Python
  1. PyQt5 QCalendarWidget 概述
    PyQt5是一个用于创建图形化应用程序的Python库,而QCalendarWidget是PyQt5中用于创建日历的控件。它可以被放置在窗口或对话框中以允许用户选择日期。

  2. 获得 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()方法,该方法将在用户单击日历中的日期时被调用。

  1. 设置 QCalendarWidget 的日期

调用 setSelectedDate()方法可设置 QCalendarWidget 的日期。例如,您可以通过以下方式将 QCalendarWidget 的日期设置为2019年11月2日:

from PyQt5.QtCore import QDate
date = QDate(2019, 11, 2)
cal.setSelectedDate(date)
  1. 允许 QCalendarWidget 只显示可用日期

通过指定 setDateRange() 属性限制此控件的日期范围。例如:

from PyQt5.QtCore import QDate
date = QDate(2019, 11, 2)
cal.setMaximumDate(date)
date = QDate(2021, 11, 4)
cal.setMinimumDate(date)
  1. 滚轮事件

滚轮事件与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() 方法来增加或减少一个月来更新选中的日期。当日期小于最小值或大于最大值时,滚动将被忽略。