如何向PyQt QcalendarWidget添加文本[重复]

问题描述 投票:0回答:1

如何写入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)

谢谢

pyqt5 qpainter qcalendarwidget
1个回答
0
投票

您必须继承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_())

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.