📜  PyQt5 QCalendarWidget - 插入多个 QAction(1)

📅  最后修改于: 2023-12-03 14:45:47.060000             🧑  作者: Mango

PyQt5 QCalendarWidget - 插入多个 QAction

QCalendarWidget 是 PyQt5 中显示日历的控件。它可以通过插入多个 QAction 实现更多功能。

这个例子将为你展示如何添加两个 QAction,一个用于选择当前月份的第一天,另一个用于选择当前月份的最后一天。

代码实现
from PyQt5.QtWidgets import QApplication, QMainWindow, QCalendarWidget, QMenu, QAction, QFileDialog
from PyQt5.QtCore import QDate, Qt
import sys


class Calendar(QMainWindow):
    def __init__(self):
        super().__init__()

        self.setWindowTitle('QCalendarWidget')
        self.setGeometry(100, 100, 350, 300)

        # 创建 QCalendarWidget
        self.cal = QCalendarWidget(self)
        self.setCentralWidget(self.cal)
        
        # 插入两个 QAction
        first_day_action = QAction('选择当前月份的第一天', self)
        last_day_action = QAction('选择当前月份的最后一天', self)

        # 绑定 QAction 的 triggered 信号到槽函数
        first_day_action.triggered.connect(self.select_first_day)
        last_day_action.triggered.connect(self.select_last_day)

        # 创建一个 QMenu,将 QAction 添加进去
        self.menu = QMenu("选项", self)
        self.menu.addAction(first_day_action)
        self.menu.addAction(last_day_action)

        # 将菜单绑定到右键事件
        self.cal.setContextMenuPolicy(Qt.CustomContextMenu)
        self.cal.customContextMenuRequested.connect(self.show_menu)

    def show_menu(self, position):
        self.menu.exec_(self.cal.mapToGlobal(position))

    def select_first_day(self):
        # 获取当前月份的第一天
        first_day = QDate(self.cal.selectedDate().year(), self.cal.selectedDate().month(), 1)
        # 设置当前日期为第一天
        self.cal.setSelectedDate(first_day)

    def select_last_day(self):
        # 获取当前月份的最后一天
        last_day = QDate(self.cal.selectedDate().year(), self.cal.selectedDate().month(), self.cal.selectedDate().daysInMonth())
        # 设置当前日期为最后一天
        self.cal.setSelectedDate(last_day)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = Calendar()
    window.show()
    sys.exit(app.exec_())
代码解释

首先,我们创建了一个 QCalendarWidget,并将其设置为主窗口的中心部件。

然后,我们插入了两个 QAction,分别用于选择当前月份的第一天和最后一天。这里我们还绑定了 triggered 信号到对应的槽函数。

接着,我们创建了一个 QMenu,并将两个 QAction 添加到菜单中。我们将菜单绑定到日历控件的右键事件上。

最后,我们实现了两个槽函数 select_first_dayselect_last_day,用于选择当前月份的第一天和最后一天。我们首先获取当前月份的第一天或最后一天的 QDate,然后将其设置为当前选择的日期。