我目前正在制作一个有日历的待办事项应用程序。每当用户在特定日期有事件时,左上角会出现一个红色圆圈。每当用户双击日期时,我希望它显示一个包含当天事件信息的新窗口。但是,我无法将信息存储到每个日期中。我怎样才能使每个日期都有一个可以存储事件的列表?
这是用户界面:
这是子类 QCalendarWidget 的代码:
class TodoCalendar(QtWidgets.QCalendarWidget):
def __init__(self, list_of_events, *args, **kwargs):
super().__init__(*args, **kwargs)
self.list_of_events = list_of_events
//list_of_events is a list of all events the user has created
self.table = self.findChild(QtWidgets.QTableView)
self.table.viewport().installEventFilter(self)
def paintCell(self, painter, rect, date):
super().paintCell(painter, rect, date)
for event in self.list_of_events.values():
if event.due_time == date:
painter.setBrush(Qt.red)
painter.drawEllipse(rect.topLeft() + QPoint(12, 7), 3, 3)
def eventFilter(self, source, event):
if (event.type() == QtCore.QEvent.MouseButtonDblClick and source is self.table.viewport()):
index = self.table.indexAt(event.pos())
print(f"row: {index.row()}, column: {index.column()}, text: {index.data()}")
return super().eventFilter(source, event)
这里还有 list_of_events 的列表:
{'test changed': <CustomWidgets.TodoEvent object at 0x00000230A5A72908>, 'due 10/8': <CustomWidgets.TodoEvent object at 0x00000230A5AA5080>, 'also due 10/9': <CustomWidgets.TodoEvent object at 0x00000230A5AC4B00>, 'also due 10/9 too': <CustomWidgets.TodoEvent object at 0x00000230A5AD0550>, 'due 10/9 too too': <CustomWidgets.TodoEvent object at 0x00000230A5AD0A90>, '10/9 2': <CustomWidgets.TodoEvent object at 0x00000230A5AD6438>, '10/10': <CustomWidgets.TodoEvent object at 0x00000230A5AD64A8>, '10/10 also': <CustomWidgets.TodoEvent object at 0x00000230A5AD64E0>, '10/10 2': <CustomWidgets.TodoEvent object at 0x00000230A5AD6550>, '10/10 3': <CustomWidgets.TodoEvent object at 0x00000230A5AD65C0>, '10/10 4': <CustomWidgets.TodoEvent object at 0x00000230A5AD6630>, 'due 10/9 changed': <CustomWidgets.TodoEvent object at 0x00000230A5AD6668>}
每个 toDoEvent 都有一个标题、到期时间、提醒时间和描述