Я пытаюсь переопределить метод paintCell() QCalendarWidget, чтобы нарисовать красный контур в ячейке с сегодняшней датой и нарисовать события, которые будут определены пользователем. Для моего календаря я использовал QItemDelegate, чтобы изменить выравнивание флагов даты, чтобы у меня было больше места для рисования событий. Однако я не могу заставить QItemDelegate и paintCell() работать вместе. Я могу иметь только одну или другую работу одновременно. Если я пытаюсь сделать и то, и другое, отображается только Делегат и ничего не рисуется.
from PySide2.QtWidgets import QMainWindow, QCalendarWidget, QApplication, QItemDelegate, QTableView
from PySide2.QtGui import QPen
from PySide2.QtCore import Qt
import sys
class MainWindow(QMainWindow):
def __init__(self, parent=None):
super().__init__()
self.calendar = CustomCalendar()
self.calendarview = self.calendar.findChild(QTableView, "qt_calendar_calendarview")
self.calendardelegate = CalendarItemDelegate(self.calendarview)
self.calendarview.setItemDelegate(self.calendardelegate)
self.setCentralWidget(self.calendar)
self.show()
class CustomCalendar(QCalendarWidget):
def __init__(self, parent=None):
super().__init__()
def paintCell(self, painter, rect, date):
QCalendarWidget.paintCell(self, painter, rect, date)
pen = QPen()
pen.setColor(Qt.red)
painter.setPen(pen)
if date == date.currentDate():
painter.save()
painter.drawRect(rect.adjusted(0, 0, -1, -1))
painter.restore()
class CalendarItemDelegate(QItemDelegate):
def paint(self, painter, option, index):
painter._date_flag = index.row() > 0
super().paint(painter, option, index)
def drawDisplay(self, painter, option, rect, text):
if painter._date_flag:
option.displayAlignment = Qt.AlignTop | Qt.AlignLeft
super().drawDisplay(painter, option, rect, text)
app = QApplication(sys.argv)
window = MainWindow()
window.show()
app.exec_()
Как я могу заставить работать оба сразу?
делегат
PaintCell