В настоящее время я делаю приложение, в котором есть календарь. Всякий раз, когда у пользователя есть событие в определенную дату, в левом верхнем углу появляется красный круг. Всякий раз, когда пользователь дважды щелкает по дате, я хочу, чтобы он отображал новое окно с информацией о событии за день. Однако у меня возникают проблемы с хранением информации на каждую дату. Как сделать так, чтобы каждая дата имела своего рода список, в котором можно хранить события?
Вот пользовательский интерфейс:
Вот код для подкласса 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 имеет заголовок, due_time, remind_time и описание