pyqt - 自定义 QComboBox 类样式重置为默认值
Posted
技术标签:
【中文标题】pyqt - 自定义 QComboBox 类样式重置为默认值【英文标题】:pyqt - Custom QComboBox class style resets to default 【发布时间】:2014-04-24 22:52:26 【问题描述】:我正在使用自定义 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 方法可以正确设置字体,但这违背了我的自定义类的目的。
【问题讨论】:
为什么需要覆盖绘画事件? 这只是我在简单地设置字体后尝试的东西不起作用。覆盖绘制事件修复了我曾经为 QWidget 遇到的类似问题。 我无法在这里测试,但不需要覆盖 【参考方案1】:删除所有内容,将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的字体。
【讨论】:
【参考方案2】:或者这也有效:
.setStyleSheet("QComboBox font: 14px 'monospace'; background-color: #fff; color: #000;border-style:solid;border-width:1px;border-color:#000;border-radius : 无; " );
【讨论】:
以上是关于pyqt - 自定义 QComboBox 类样式重置为默认值的主要内容,如果未能解决你的问题,请参考以下文章
自定义实现 PyQt5 下拉复选框 ComboCheckBox
如何从另一个类 PyQT 向 QComboBox 添加项目?
QComboBox setMaxVisible() 不适用于融合风格