【问题标题】:How to apply qss to a QCalendarWidget?如何将 qss 应用于 QCalendarWidget?
【发布时间】:2019-05-13 01:22:16
【问题描述】:

晚上好,我正在尝试生成一个像图片中的日历:

到目前为止,我使用 QSS 所取得的成就是:

这是我用过的QSS

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;
}

我仍然需要更改日期(星期日和星期六)的颜色,并且在选择日期时边缘是圆形的。

这是我尝试过的:

QCalendarWidget{
   color:grey;
}

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

}

但它不起作用我希望你能帮助我

【问题讨论】:

    标签: python pyqt pyqt5 qtstylesheets qcalendarwidget


    【解决方案1】:

    不是所有的事情都可以用Qt Style Sheet来完成,事实上它是非常有限的,在这种情况下要改变周末的颜色你必须使用setWeekdayTextFormat()并且要改变所选日期的形状你应该使用@987654324 @。

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

    【讨论】:

      猜你喜欢
      • 2013-01-18
      • 2022-07-11
      • 2013-02-13
      • 1970-01-01
      • 2019-11-24
      • 1970-01-01
      • 2020-06-25
      • 2019-05-12
      • 2021-07-27
      相关资源
      最近更新 更多