Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Убрать выделение выходный дней крастным цветом в QCalendar

Văĉeslav Erl Мастер (1128), на голосовании 2 месяца назад
Как убрать выделение выходных дней крастным цветом в QCalendar? Я использую PyQt6.
CalendarWidget.py
 from __init__ import * 

class CalendarWidget(QCalendarWidget):
def __init__(self, parent=None):
super().__init__(parent)
self.setGridVisible(False)
self.setVerticalHeaderFormat(QCalendarWidget.VerticalHeaderFormat.NoVerticalHeader)
self.setHorizontalHeaderFormat(QCalendarWidget.HorizontalHeaderFormat.NoHorizontalHeader)
self.setSelectedDate(QDate.currentDate())
self.setNavigationBarVisible(False)

def paintCell(self, painter, rect, date):
if not date.month() == self.selectedDate().month():
painter.save()
painter.setPen(QPen(QColor.fromHsl(230, 12, 49)))
painter.drawText(rect, int(Qt.AlignmentFlag.AlignCenter), str(date.day()))
painter.restore()
else:
QCalendarWidget.paintCell(self, painter, rect, date)
Дополнен 3 месяца назад
Ответ:
 for dayOff in (Qt.DayOfWeek.Saturday, Qt.DayOfWeek.Sunday):
format = self.weekdayTextFormat(dayOff)
format.setForeground(QColor("#CAD3F5"))
self.setWeekdayTextFormat(dayOff, format)
Голосование за лучший ответ
Анонимус Мудрец (14242) 3 месяца назад
Вы можете убрать выделение выходных дней красным цветом, удалив код, который отвечает за изменение цвета текста в paintCell методе:
 from __init__ import *  

class CalendarWidget(QCalendarWidget):
def __init__(self, parent=None):
super().__init__(parent)
self.setGridVisible(False)
self.setVerticalHeaderFormat(QCalendarWidget.VerticalHeaderFormat.NoVerticalHeader)
self.setHorizontalHeaderFormat(QCalendarWidget.HorizontalHeaderFormat.NoHorizontalHeader)
self.setSelectedDate(QDate.currentDate())
self.setNavigationBarVisible(False)

def paintCell(self, painter, rect, date):
# Убираем блок с изменением цвета текста:
# if not date.month() == self.selectedDate().month():
# painter.save()
# painter.setPen(QPen(QColor.fromHsl(230, 12, 49)))
# painter.drawText(rect, int(Qt.AlignmentFlag.AlignCenter), str(date.day()))
# painter.restore()
# else:
# QCalendarWidget.paintCell(self, painter, rect, date)

# Оставляем только стандартную отрисовку ячейки:
QCalendarWidget.paintCell(self, painter, rect, date)
Văĉeslav ErlМастер (1128) 3 месяца назад
Функция которую я прекрепил изменяет цвет только дней вне текущего месяца, поскольку идет проверка на соответствие месяцев. После применения предложенного кода были изменены только дни вне месяца.
Похожие вопросы