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

pyqt-自定义QComboBox类样式重置为默认值,qt,pyqt,Qt,Pyqt,我正在使用一个自定义组合框类,因为我想为我的所有组合框标准化字体。我尝试了3种不同的方法,如下面的pyqt类定义所示: class StandardComboBox(QComboBox): def _init_(self, parent = None): super(StandardComboBox, self).__init__(parent) self.setFont(QFont('Courier New', 30))

我正在使用一个自定义组合框类,因为我想为我的所有组合框标准化字体。我尝试了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)

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

删除所有内容,只需在
\uu init\uu
中保持self.setFont(QFont(…)不变即可。这对我有用。代码的问题在于,对
init
方法使用了单个前导下划线和尾随下划线。用双下划线,
def\uuuu init\uuuu(self,parent=None))

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

或者此代码也可以:


.setStyleSheet(“QComboBox{font:14px'monospace';背景色:#fff;颜色:#000;边框样式:实心;边框宽度:1px;边框颜色:#000;边框半径:无;}”)

为什么需要覆盖绘制事件?这只是我在简单设置字体后尝试的,但没有成功。覆盖绘画事件修复了我曾经遇到的QWidget的类似问题。我不能在这里测试,但不需要覆盖
self.myComboBox = StandardComboBox()
class StandardComboBox(QComboBox):
    def __init__(self, parent = None):
        super(StandardComboBox, self).__init__(parent)
        self.setFont(QFont('Courier New', 30))