PyQt5 QCalendarWidget – 通过启用来延续功能

  • Post category:Python

当你需要在Python的Qt应用程序中添加日期选择器时,使用 PyQt5 的 QCalendarWidget 控件是一个好选择。QCalendarWidget 提供了丰富的日期操作功能,如日期选择器小部件、日历工具栏、星期几号等。本文将分享如何在 Python 中使用 PyQt5 QCalendarWidget 的相关内容,涵盖了通过启用来延续功能的使用攻略及其示例说明。

安装 Pyqt5

在使用 PyQt5 QCalendarWidget 之前,需要先安装 PyQt5 包。

命令行窗口运行以下命令即可:

pip install PyQt5

PyQt5 QCalendarWidget 控件

QCalendarWidget 控件在 PyQt5 中的使用非常方便,只需在代码中实例化并添加到应用程序窗口即可。以下是一个最简单的使用示例:

from PyQt5.QtWidgets import QApplication, QWidget, QCalendarWidget

app = QApplication([])
widget = QWidget()

calendar = QCalendarWidget()
widget.setLayout(QHBoxLayout())
widget.layout().addWidget(calendar)

widget.show()
app.exec_()

使用以上代码我们可以立即在应用程序窗口中看到一个可用的 QCalendarWidget 控件。

星期几号实现

一个常见的需求是在 QCalendarWidget 控件中显示星期几的日期。我们可以在 QCalendarWidget 控件中启用 QCalendarWidget::NavigationBarShown 属性,从而显示出日历控件工具栏。以下是一个完整的示例:

from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QCalendarWidget, QLabel

app = QApplication([])
widget = QWidget()
widget.setLayout(QVBoxLayout())

calendar_widget = QCalendarWidget()

############# 星期几日期控件设置 ################
calendar_widget.setFirstDayOfWeek(2) # 设置一周的起始星期(2表示周二)
calendar_widget.setNavigationBarVisible(True) # 启用导航工具栏
calendar_widget.setHeaderVisible(False) # 禁用标题
calendar_widget.setVerticalHeaderFormat(QCalendarWidget.NoVerticalHeader) # 禁用纵向日历表格

calendar_widget.setSelectedDate(QDate(2021, 9, 1)) # 设置初始选定日期

widget_label = QLabel()
def show_date():
    date = calendar_widget.selectedDate()
    widget_label.setText(date.toString("yyyy-MM-dd (ddd)"))

calendar_widget.selectionChanged.connect(show_date)
widget.layout().addWidget(calendar_widget)
widget.layout().addWidget(widget_label)

widget.show()
app.exec_()

执行上述代码,我们可以在使用 QCalendarWidget 选择日期时,在下方 QLabel 控件中看到所选日期星期几的完整日期信息。

延续功能

延续功能是 QCalendarWidget 控件的一个重要功能,它允许用户在选择日期时手动划定一段时间范围,而不是单个日期。通过 QCalendarWidget 的 setSelectionMode() 方法来启用延续功能。在 “SingleSelection” 模式下,用户仍可以选择单独的日期。示例如下:

from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QCalendarWidget, QLabel

app = QApplication([])
widget = QWidget()
widget.setLayout(QVBoxLayout())

calendar_widget = QCalendarWidget()

############# 延续选择控件设置 ################
calendar_widget.setFirstDayOfWeek(2) # 设置一周的起始星期(2表示周二)
calendar_widget.setNavigationBarVisible(True) # 启用导航工具栏
calendar_widget.setHeaderVisible(False) # 禁用标题
calendar_widget.setVerticalHeaderFormat(QCalendarWidget.NoVerticalHeader) # 禁用纵向日历表格

calendar_widget.setSelectedDate(QDate(2021, 9, 1)) # 设置初始选定日期

calendar_widget.setSelectionMode(QCalendarWidget.ExtendedSelection) # 启用延续模式

widget_label = QLabel()
def show_date():
    date_range = calendar_widget.selectedDateRange()
    start_date = date_range.start().toString("yyyy-MM-dd (ddd)")
    end_date = date_range.end().toString("yyyy-MM-dd (ddd)")
    widget_label.setText(f"start: {start_date}, end: {end_date}")

calendar_widget.selectionChanged.connect(show_date)
widget.layout().addWidget(calendar_widget)
widget.layout().addWidget(widget_label)

widget.show()
app.exec_()

执行上述代码,我们可以通过在 QCalendarWidget 中拖动鼠标来划定日期范围的方式,选择并显示所选日期范围的完整信息。

结论

在这篇文章中,我们学习了如何使用 PyQt5 QCalendarWidget 控件实现不同的日期选择器,并演示了如何通过启用延续功能,选择更加复杂的日期范围。总的来说,PyQt5 QCalendarWidget 对于日期选择和操作非常实用。