Как закрасить дату в QCalendarWidget по нажатию кнопки
Как закрасить ячейку (дату) по нажатию на кнопку в QCalendarWidget в функции fillDate()
Код:
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton,QCalendarWidget
class Ui_Form(object):
def setupUi(self, Form):
self.resize(750, 650)
# Календарь
self.Calendar = QCalendarWidget(Form)
self.Calendar.setGeometry(3, 10, 740, 550)
self.Calendar.setStyleSheet("QCalendarWidget QTableView{\n""font-size: 30px;\n""/*color: white;\n""background-color: transparent;*/\n""}")
self.Calendar.setObjectName("calendarWidget")
# Кнопка
self.SelectDate = QPushButton(Form)
self.SelectDate.setGeometry(250, 580, 220, 60)
self.SelectDate.setStyleSheet("font-size: 40px;\n""color: white;\n""background: lightgreen;")
self.SelectDate.setText("Отметить")
class Logic(QWidget, Ui_Form):
def __init__(self):
super().__init__()
self.setupUi(self)
self.SelectDate.clicked.connect(lambda: self.fillDate())
def fillDate(self):
date = self.Calendar.selectedDate()
# закраска даты
if __name__ == "__main__":
import sys
app = QApplication(sys.argv)
window = Logic()
window.show()
sys.exit(app.exec_())
Ответы (1 шт):
Автор решения: S. Nick
→ Ссылка
Попробуйте так:
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QCalendarWidget
from PyQt5.QtCore import Qt, QRectF, QDate
from PyQt5.QtGui import QPainter, QColor, QFont, QBrush
class CalendarWidget(QCalendarWidget): # +++
def __init__(self, parent=None): # +++
super().__init__(parent) # +++
self.parent = parent # +++
def paintCell(self, painter, rect, date):
painter.setRenderHint(QPainter.Antialiasing, True)
if date == self.parent.date: # self.parent.date
painter.save()
self.brush = QBrush(Qt.Dense6Pattern)
self.brush.setColor(Qt.red)
painter.setBrush(self.brush)
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\n\nWorld')
painter.restore()
else:
QCalendarWidget.paintCell(self, painter, rect, date)
class Ui_Form(object):
def setupUi(self, Form):
self.resize(750, 650)
# Календарь
# self.Calendar = QCalendarWidget(Form) # ---
self.Calendar = CalendarWidget(Form) # +++
self.Calendar.setGeometry(3, 10, 740, 550)
self.Calendar.setStyleSheet("QCalendarWidget QTableView{\n""font-size: 30px;\n""/*color: white;\n""background-color: transparent;*/\n""}")
self.Calendar.setObjectName("calendarWidget")
# Кнопка
self.SelectDate = QPushButton(Form)
self.SelectDate.setGeometry(250, 580, 220, 60)
self.SelectDate.setStyleSheet("font-size: 40px;\n""color: white;\n""background: lightgreen;")
self.SelectDate.setText("Отметить")
class Logic(QWidget, Ui_Form):
date = None # +++
def __init__(self):
super().__init__()
self.setupUi(self)
self.SelectDate.clicked.connect(lambda: self.fillDate())
def fillDate(self):
self.date = self.Calendar.selectedDate()
self.Calendar.updateCells() # +++
if __name__ == "__main__":
import sys
app = QApplication(sys.argv)
window = Logic()
window.show()
sys.exit(app.exec_())
