📅  最后修改于: 2023-12-03 14:45:47.060000             🧑  作者: Mango
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_day
和 select_last_day
,用于选择当前月份的第一天和最后一天。我们首先获取当前月份的第一天或最后一天的 QDate
,然后将其设置为当前选择的日期。