📅  最后修改于: 2023-12-03 15:18:48.043000             🧑  作者: Mango
在 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() 方法,我们可以在关闭程序时显示一个消息框以让用户确认是否退出程序。这里我提供的示例程序可以帮助你从中学习和理解。