QCalendarWidget - чтение цвета фона выбранной даты - PullRequest
0 голосов
/ 03 сентября 2018

Я пытаюсь создать календарь, который бы переключал цвет даты при клике. Если текущий фон белый, установите его на зеленый. Если он зеленый, установите его на красный. Если он красный, установите его обратно на белый. Однако я не знаю, как получить выделение цвета фона. Может кто-нибудь помочь, пожалуйста?

Таблица стилей была настроена так, чтобы избавиться от того цвета выделения по умолчанию, который блокирует цвет, который я хочу показать.

import sys
from PySide.QtGui import (QCalendarWidget, QApplication, QBrush)
from PySide.QtCore import Qt

class UserCalendar(QCalendarWidget):
    def __init__(self, parent=None):
        super(UserCalendar, self).__init__(parent)
        style = 'QTableView{selection-background-color: white;' \
                'selection-color: black;}'
        self.setStyleSheet(style)
        self.clicked.connect(self.onClick)

    def onClick(self, date):
        brush = QBrush()
        brush.setColor(Qt.green)
        charformat = self.dateTextFormat(date)
        charformat.setBackground(brush)
        self.setDateTextFormat(date, charformat)
        style = 'QTableView{selection-background-color: green;' \
                'selection-color: black;}'
        self.setStyleSheet(style)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    cal = UserCalendar()
    cal.show()
    cal.raise_()
    sys.exit(app.exec_())

1 Ответ

0 голосов
/ 03 сентября 2018

Таким же образом, как вы установили цвет фона с помощью dateTextFormat(...), вы можете получить цвет с помощью background(), который возвращает QBrush(...), а затем использовать его метод цвета (...). По умолчанию цвет черный, а не белый, как указано.

import sys
from PySide.QtGui import (QCalendarWidget, QApplication, QBrush, QColor)
from PySide.QtCore import Qt, Slot, QDate


class UserCalendar(QCalendarWidget):
    def __init__(self, parent=None):
        super(UserCalendar, self).__init__(parent)
        self.set_selection_color(QColor("white"))
        self.clicked.connect(self.onClick)

    @Slot(QDate)
    def onClick(self, date):
        color = self.get_next_color(date)
        charformat = self.dateTextFormat(date)
        charformat.setBackground(QBrush(color))
        self.setDateTextFormat(date, charformat)
        self.set_selection_color(color)

    def set_selection_color(self, color):
        style = 'QTableView{{selection-background-color: {color};' \
                'selection-color: black;}}'.format(color=color.name())
        self.setStyleSheet(style)

    def get_next_color(self, date):
        color = self.dateTextFormat(date).background().color()
        # by default background color is Qt.black
        if color in (QColor(Qt.black), QColor(Qt.white)) :
            return QColor(Qt.green)
        if color == QColor(Qt.green):
            return QColor(Qt.red)
        return QColor(Qt.white)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    cal = UserCalendar()
    cal.show()
    cal.raise_()
    sys.exit(app.exec_())
...