Другое событие NullPointerException
возникает, когда объявляется массив объектов, а затем сразу же пытается разыменовать его внутри.
String[] phrases = new String[10];
String keyPhrase = "Bird";
for(String phrase : phrases) {
System.out.println(phrase.equals(keyPhrase));
}
Этот конкретный NPE можно избежать, если порядок сравнения отменяется ; а именно, использовать .equals
для гарантированного непустого объекта.
Все элементы внутри массива инициализируются их общим начальным значением ; для любого типа массива объектов, это означает, что все элементы null
.
Вы должны инициализировать элементы в массиве перед доступом или разыменованием их.
String[] phrases = new String[] {"The bird", "A bird", "My bird", "Bird"};
String keyPhrase = "Bird";
for(String phrase : phrases) {
System.out.println(phrase.equals(keyPhrase));
}
Вы должны перезаписать метод paintCell()
, так как этот метод вызывается в paintEvent ():
class CalendarWidget(QCalendarWidget):
def paintCell(self, painter, rect, date):
super(CalendarWidget, self).paintCell(painter, rect, date)
if date == self.selectedDate():
painter.save()
f = QFont()
f.setPixelSize(10)
f.setBold(True)
f.setItalic(True)
painter.setFont(f)
r = rect
painter.drawText(
rect.topLeft() + QPoint(10, 33),
"{}/{}".format("tset1", "test2"),
)
painter.restore()
class main_window(QWidget):
def __init__(self):
super(main_window, self).__init__()
self.resize(1280, 900)
self.Calendar()
def Calendar(self):
self.cal = CalendarWidget(self)
self.cal.resize(500, 500)
Обновление:
Если вы чтобы текст оставался, вы должны сохранить дату и перекрасить при необходимости, так как Qt перерисовывает все
class CalendarWidget(QCalendarWidget):
def __init__(self, parent=None):
super(CalendarWidget, self).__init__(parent)
self._selected_dates = set()
self._selected_dates.add(self.selectedDate())
self.clicked.connect(self.on_clicked)
@pyqtSlot(QDate)
def on_clicked(self, date):
self._selected_dates.add(date)
def paintCell(self, painter, rect, date):
super(CalendarWidget, self).paintCell(painter, rect, date)
if date in self._selected_dates:
painter.save()
f = QFont()
f.setPixelSize(10)
f.setBold(True)
f.setItalic(True)
painter.setFont(f)
r = rect
painter.drawText(
rect.topLeft() + QPoint(10, 33),
"{}/{}".format("tset1", "test2"),
)
painter.restore()