PyQt5 QCalendarWidget – 添加多个QAction

  • Post category:Python

下面开始详细讲解Python的PyQt5 QCalendarWidget-添加多个QAction的完整使用攻略。

1. 确认环境

在使用PyQt5 QCalendarWidget之前,需要确认已安装Python和PyQt5的开发环境。可以使用以下代码来检查是否已安装:

import PyQt5
print(PyQt5.__version__)

如果输出了PyQt5的版本号,则表示已安装。

2. 添加单个QAction

QAction是PyQt5中的一个重要组件,可以用来添加菜单、工具栏等用户交互元素。

要添加单个QAction到QCalendarWidget中,可以按照以下步骤进行:

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QCalendarWidget, QAction

class CalendarWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.setWindowTitle('Calendar Window')
        self.setGeometry(100, 100, 400, 300)

        self.cal = QCalendarWidget(self)
        self.setCentralWidget(self.cal)

        self.act = QAction('Print Date', self)
        self.act.triggered.connect(self.printDate)
        self.cal.addAction(self.act)

    def printDate(self):
        selected_date = self.cal.selectedDate()
        print(f'Selected date: {selected_date.toString()}')

if __name__ == '__main__':
    app = QApplication(sys.argv)
    calendar_window = CalendarWindow()
    calendar_window.show()
    sys.exit(app.exec_())

上述代码创建了一个QCalendarWidget并在其中添加了一个QAction。该QAction的文本为“Print Date”,单击该Action会触发printDate()方法,向控制台输出当前选中的日期。

3. 添加多个QAction

要在QCalendarWidget中添加多个QAction,只需要在initUI()方法中创建多个QAction并将它们添加到QCalendarWidget中即可。

下面是一个简单的示例,添加了3个QAction:一个用于打印选定日期,两个用于切换显示模式。

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QCalendarWidget, QAction

class CalendarWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.setWindowTitle('Calendar Window')
        self.setGeometry(100, 100, 400, 300)

        self.cal = QCalendarWidget(self)
        self.setCentralWidget(self.cal)

        # 添加打印日期的Action
        self.print_act = QAction('Print Date', self)
        self.print_act.triggered.connect(self.printDate)
        self.cal.addAction(self.print_act)

        # 添加切换显示模式的Actions
        self.month_act = QAction('Month', self)
        self.month_act.setCheckable(True)
        self.month_act.setChecked(True)
        self.month_act.triggered.connect(self.showMonth)
        self.cal.addAction(self.month_act)

        self.week_act = QAction('Week', self)
        self.week_act.setCheckable(True)
        self.week_act.triggered.connect(self.showWeek)
        self.cal.addAction(self.week_act)

    def printDate(self):
        selected_date = self.cal.selectedDate()
        print(f'Selected date: {selected_date.toString()}')

    def showMonth(self):
        self.cal.setGridVisible(False)

    def showWeek(self):
        self.cal.setGridVisible(True)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    calendar_window = CalendarWindow()
    calendar_window.show()
    sys.exit(app.exec_())

上述示例中创建了三个QAction:一个用于打印选定日期,两个用于切换显示模式。其中,显示模式QActions产生的效果是在calendar中可视化展示不同的日期粒度(月/周)。

在此过程中,在月视图切换到周视图时,calendar会同时进行改变。