Как добавить текст в PyQt QcalendarWidget

Как писать в ячейку QCalendarWidget? В python я продолжаю получать сообщение о том, что художник не активен. Может ли кто-нибудь мне с этим помочь?

qp = QtGui.QPainter(self)
qp.setPen(QtGui.QColor(168, 34, 3))
qp.setFont(QtGui.QFont('Decorative', 10))
qp.drawText(rect, QtCore.Qt.AlignCenter, 'hello') 

rect = QtCore.QRect()
date = QtCore.QDate.fromString('2020-01-01')
calendar = QtWidgets.QCalendarWidget(self)

calendar.paintCell(qp, rect, date)

Спасибо

1 ответ

Вы должны унаследовать от QCalendarWidget и перезаписать paintCell метод.

import sys
from PyQt5.QtCore    import Qt, QRectF, QDate
from PyQt5.QtGui     import QPainter, QColor, QFont
from PyQt5.QtWidgets import QCalendarWidget, QApplication

class CalendarWidget(QCalendarWidget):

    def paintCell(self, painter, rect, date):
        painter.setRenderHint(QPainter.Antialiasing, True)
        if date == QDate(2020, 1, 1):
            painter.save()
            painter.drawRect(rect)
            painter.setPen(QColor(168, 34, 3))
            painter.setFont(QFont('Decorative', 10))            
            painter.drawText(QRectF(rect), Qt.TextSingleLine|Qt.AlignCenter, str(date.day()))
            painter.drawText(rect, Qt.AlignCenter, 'Hello\nWorld') 

            painter.restore()
        else:
            QCalendarWidget.paintCell(self, painter, rect, date)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    w = CalendarWidget()
    w.show()
    sys.exit(app.exec_())

Другие вопросы по тегам