PyQt5 QCalendarWidget 设置动作事件

  • Post category:Python

当用户在 QCalendarWidget 选择日期时,可以使用动作事件来响应用户操作。在 Python 的 PyQt5 库中,可以使用以下代码实现 QCalendarWidget 的动作事件设置:

calendar = QCalendarWidget()
calendar.selectionChanged.connect(self.on_calendar_selectionChanged)

这段代码创建了一个 QCalendarWidget 对象,并将其 selectionChanged 信号与 on_calendar_selectionChanged() 方法绑定。当用户在日历中选择日期时,会自动调用 on_calendar_selectionChanged() 方法。

接下来,我们来看一个具体的示例。假设我们在一个窗口中添加了一个 QCalendarWidget 和一个 QTextEdit 控件。我们希望当用户选择日期时,会在 QTextEdit 中显示所选择的日期。完整的代码实现如下:

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


class MainWindow(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        # 创建布局和控件
        layout = QVBoxLayout()
        self.calendar = QCalendarWidget()
        self.dialog = QTextEdit()

        # 将控件加入布局
        layout.addWidget(self.calendar)
        layout.addWidget(self.dialog)

        # 设置布局
        self.setLayout(layout)

        # 绑定事件
        self.calendar.selectionChanged.connect(self.on_calendar_selectionChanged)

    def on_calendar_selectionChanged(self):
        # 获取所选日期
        date = self.calendar.selectedDate().toString("yyyy-MM-dd")

        # 在 QTextEdit 中显示所选日期
        self.dialog.setText(date)


if __name__ == "__main__":
    app = QApplication([])
    window = MainWindow()
    window.show()
    app.exec_()

在上面的代码中,我们创建了一个名为 MainWindow 的窗口,并在其中添加了 QCalendarWidget 和 QTextEdit 控件。我们将选定日期的显示操作放在 on_calendar_selectionChanged() 方法中。当用户在日历中选择日期时,该方法被触发,并在 QTextEdit 中显示所选日期。

另一个示例是当用户在日历中选择日期时,将选择的日期添加到列表控件中。完整的代码实现如下:

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


class MainWindow(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        # 创建布局和控件
        layout = QVBoxLayout()
        self.calendar = QCalendarWidget()
        self.list = QListWidget()

        # 将控件加入布局
        layout.addWidget(self.calendar)
        layout.addWidget(self.list)

        # 设置布局
        self.setLayout(layout)

        # 绑定事件
        self.calendar.selectionChanged.connect(self.on_calendar_selectionChanged)

    def on_calendar_selectionChanged(self):
        # 获取所选日期
        date = self.calendar.selectedDate().toString("yyyy-MM-dd")

        # 添加到列表控件
        self.list.addItem(date)


if __name__ == "__main__":
    app = QApplication([])
    window = MainWindow()
    window.show()
    app.exec_()

在这个示例中,我们创建了一个名为 MainWindow 的窗口,并添加了 QCalendarWidget 和 QListWidget 控件。在 on_calendar_selectionChanged() 方法中,我们将选定的日期添加到 QListWidget 控件中。这个示例演示了如何使用动作事件来更新控件的数据。