📜  PyQt5 QCalendarWidget – 设置关闭事件(1)

📅  最后修改于: 2023-12-03 15:18:48.043000             🧑  作者: Mango

PyQt5 QCalendarWidget - 设置关闭事件

在 PyQt5 中,QCalendarWidget 是一个内置的日历小部件。它允许用户选择日期并在 GUI 中显示出来。在本篇文章中,我们将学习如何在 QCalendarWidget 上设置关闭事件。

示例程序

下面是一个示例程序,它使用 QCalendarWidget 显示一个日历并在关闭程序时显示一个消息框。

from PyQt5.QtWidgets import QApplication, QWidget, QCalendarWidget, QMessageBox
from PyQt5.QtCore import pyqtSlot

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

    def initUI(self):
        self.setWindowTitle('PyQt5 QCalendarWidget - 设置关闭事件')

        # 创建 QCalendarWidget 并设置关闭事件
        self.calendar = QCalendarWidget(self)
        self.calendar.selectionChanged.connect(self.showSelectedDate)
        self.calendar.clicked.connect(self.showSelectedDate)
        self.calendar.activated.connect(self.showSelectedDate)
        self.calendar.window().closeEvent = self.closeEvent

        self.show()

    # 在关闭程序时显示一个消息框
    def closeEvent(self, event):
        reply = QMessageBox.question(self, '确认', '确定要退出吗?', QMessageBox.Yes | QMessageBox.No, QMessageBox.No)
        if reply == QMessageBox.Yes:
            event.accept()
        else:
            event.ignore()

    # 在状态栏上显示所选日期
    @pyqtSlot()
    def showSelectedDate(self):
        selectedDate = self.calendar.selectedDate().toString("yyyy-MM-dd")
        self.statusBar().showMessage('已选日期: ' + selectedDate)


if __name__ == '__main__':
    app = QApplication([])
    ex = App()
    app.exec_()
代码解释

首先,我们必须创建一个 QCalendarWidget 并将其添加到窗口中。为了在关闭程序时显示一个消息框,我们需要重写 QCalendarWidget 窗口的 closeEvent() 方法。在这个方法中,我们使用 QMessageBox.question() 显示一个消息框要求用户确认是否要退出程序。如果用户单击“是”按钮,我们就调用 event.accept() 关闭程序。否则,我们调用 event.ignore() 忽略关闭事件。

def initUI(self):
        self.setWindowTitle('PyQt5 QCalendarWidget - 设置关闭事件')

        # 创建 QCalendarWidget 并设置关闭事件
        self.calendar = QCalendarWidget(self)
        self.calendar.selectionChanged.connect(self.showSelectedDate)
        self.calendar.clicked.connect(self.showSelectedDate)
        self.calendar.activated.connect(self.showSelectedDate)
        self.calendar.window().closeEvent = self.closeEvent

        self.show()

    # 在关闭程序时显示一个消息框
    def closeEvent(self, event):
        reply = QMessageBox.question(self, '确认', '确定要退出吗?', QMessageBox.Yes | QMessageBox.No, QMessageBox.No)
        if reply == QMessageBox.Yes:
            event.accept()
        else:
            event.ignore()

以上代码中,我们将 QCalendarWidget 的 selectionChanged、clicked 和 activated 信号连接到了 showSelectedDate() 槽函数上。这个槽函数在状态栏上显示所选日期。

@pyqtSlot()
    def showSelectedDate(self):
        selectedDate = self.calendar.selectedDate().toString("yyyy-MM-dd")
        self.statusBar().showMessage('已选日期: ' + selectedDate)

最后,我们在主函数中创建了应用程序,并显示 GUI。

if __name__ == '__main__':
    app = QApplication([])
    ex = App()
    app.exec_()
总结

本篇文章中,我们学习了如何在 PyQt5 中设置 QCalendarWidget 的关闭事件。通过重写 QCalendarWidget 窗口的 closeEvent() 方法,我们可以在关闭程序时显示一个消息框以让用户确认是否退出程序。这里我提供的示例程序可以帮助你从中学习和理解。