首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将qss应用于QCalendarWidget?

如何将qss应用于QCalendarWidget?
EN

Stack Overflow用户
提问于 2018-12-12 00:50:10
回答 1查看 2.1K关注 0票数 1

晚上好,我正试着制作一个像图中那样的日历:

到目前为止,我在QSS方面取得的成就如下:

这是我用过的QSS

代码语言:javascript
复制
QCalendarWidget QAbstractItemView
{ 
selection-background-color: #042944; 
selection-color: white;
selection-border:10px solid red;

}
QCalendarWidget QWidget 
{
  color:grey;
}
QCalendarWidget QTableView{
border-width:0px;
background-color:lightgrey;
}

我仍然需要改变日子的颜色(星期日和星期六),当选择一天的边缘是圆的。

这就是我试过的:

代码语言:javascript
复制
QCalendarWidget{
   color:grey;
}

QCalendarWidget QTableView::item:selected{
   border-radius:30px;

}

但这不管用我希望你能帮我

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-12 01:47:27

不是所有的Qt样式表都可以完成,事实上,它是非常有限的,在这种情况下,要更改周末的颜色--您必须使用setWeekdayTextFormat(),并且要更改选定的日期的形状--您应该使用paintCell()

代码语言:javascript
复制
from PyQt5 import QtCore, QtGui, QtWidgets

QSS = '''
QCalendarWidget QAbstractItemView
{ 
    selection-background-color: #042944; 
    selection-color: white;
}
QCalendarWidget QWidget 
{
  color:grey;
}
QCalendarWidget QTableView
{
    border-width:0px;
    background-color:lightgrey;
}
'''

class CalendarWidget(QtWidgets.QCalendarWidget):
    def __init__(self, parent=None):
        super(CalendarWidget, self).__init__(parent,
            verticalHeaderFormat=QtWidgets.QCalendarWidget.NoVerticalHeader,
            gridVisible=False)

        for d in (QtCore.Qt.Saturday, QtCore.Qt.Sunday,):
            fmt = self.weekdayTextFormat(d)
            fmt.setForeground(QtCore.Qt.darkGray)
            self.setWeekdayTextFormat(d, fmt)

    def paintCell(self, painter, rect, date):
        if date == self.selectedDate():
            painter.save()
            painter.fillRect(rect, QtGui.QColor("#D3D3D3"))
            painter.setPen(QtCore.Qt.NoPen)
            painter.setBrush(QtGui.QColor("#33B5E5"))
            r = QtCore.QRect(QtCore.QPoint(), min(rect.width(), rect.height())*QtCore.QSize(1, 1))
            r.moveCenter(rect.center())
            painter.drawEllipse(r)
            painter.setPen(QtGui.QPen(QtGui.QColor("gray")))
            painter.drawText(rect, QtCore.Qt.AlignCenter, str(date.day()))
            painter.restore()
        else:
            super(CalendarWidget, self).paintCell(painter, rect, date)

if __name__ == '__main__':
    import sys
    app = QtWidgets.QApplication(sys.argv)
    app.setStyleSheet(QSS)
    w = CalendarWidget()
    w.show()
    sys.exit(app.exec_())

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53734535

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档