pyqt - 自定义QComboBox类样式重置为默认值

时间:2014-04-24 22:52:27

标签: qt pyqt

我正在使用自定义的ComboBox类,因为我想为所有组合框标准化字体。我尝试过3种不同的方式,如下面的pyqt类定义所示:

class StandardComboBox(QComboBox):
    def _init_(self, parent = None):
        super(StandardComboBox, self).__init__(parent)
        self.setFont(QFont('Courier New', 30))                    #<<< 1
        self.setStyleSheet("font: 30pt \"Courier New\";")         #<<< 2

    def paintEvent(self, e):
        painter = QStylePainter( self )
        painter.setPen( self.palette().color( QPalette.Text ) )

        opt = QStyleOptionComboBox()
        opt.fontMetrics = QFontMetrics(QFont('Courier New', 30))  #<<<3
        self.initStyleOption( opt )
        painter.drawComplexControl( QStyle.CC_ComboBox, opt )

        painter.drawControl( QStyle.CE_ComboBoxLabel, opt)

要打电话给我所有的课程:

self.myComboBox = StandardComboBox()

但是,我的组合框仍然具有默认样式,而不是我设置的字体。我错过了什么?在组合框上再次调用#1或#2方法可以正确设置字体,但这会破坏我的自定义类的目的。

2 个答案:

答案 0 :(得分:2)

删除所有内容,只需将self.setFont(QFont(...))保留原样__init__。这对我有用。代码的问题在于,您使用init方法的单个前导和尾部下划线。放下双下划线,def __init__(self, parent=None))

class StandardComboBox(QComboBox):
    def __init__(self, parent = None):
        super(StandardComboBox, self).__init__(parent)
        self.setFont(QFont('Courier New', 30))

此代码足以更改comboBox的字体。

答案 1 :(得分:0)

或者这也有效:

.setStyleSheet(“QComboBox {font:14px'monospace'; background-color:#fff; color:#000; border-style:solid; border-width:1px; border-color:#000; border-radius :none;}“);