QCalendarWidget读取所选d的背景色

2024-10-04 07:36:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试创建一个日历,可以在点击时切换日期的颜色。如果当前背景为白色,则将其设置为绿色。如果它是绿色的,就把它设置成红色。如果它是红色的,就把它调回白色。但是我不知道如何得到选择的背景色。谁能帮忙吗?在

样式表被设置为去掉默认的选择颜色,它阻止了我想要显示的颜色。在

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_())

Tags: importselfdatestyle颜色syscalcolor
1条回答
网友
1楼 · 发布于 2024-10-04 07:36:03

与使用dateTextFormat(...)设置背景颜色相同,可以使用返回QBrush(...)background()获取颜色,然后使用其color(…)方法。默认情况下,颜色为黑色,而不是观察到的白色。在

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_())

相关问题 更多 >