首先需要安装 PyQT5,可以使用 pip 命令安装:
pip install PyQt5
然后在 Python 中导入相应库:
from PyQt5.QtWidgets import QComboBox, QApplication
from PyQt5.QtGui import QPixmap
from PyQt5.QtCore import Qt
接下来,我们可以通过继承 QComboBox 类来创建我们自己的组合框类。
class MyComboBox(QComboBox):
def __init__(self):
super().__init__()
self.setStyleSheet("QComboBox{background-color:white}")
我们在自己的组合框类中设置了一个初始样式表,在这里我们将组合框的背景颜色设置为白色。
现在,我们可以通过覆盖 QComboBox 类的 paintEvent() 方法,来为组合框设置背景图片。
class MyComboBox(QComboBox):
def __init__(self):
super().__init__()
self.setStyleSheet("QComboBox{background-color:white}")
self.setFixedSize(150, 30)
def paintEvent(self, event):
painter = QPainter(self)
option = QStyleOptionComboBox()
self.initStyleOption(option)
painter.drawPixmap(self.rect(), QPixmap('background.png'))
self.style().drawComplexControl(QStyle.CC_ComboBox, option, painter, self)
我们利用 QPainter 对象绘制了背景图片,然后再调用父类的绘制方法将组合框本身绘制出来。
接下来,我们可以创建一个 QApplication 对象,来测试我们的自定义组合框类。
if __name__ == "__main__":
import sys
app = QApplication(sys.argv)
combo = MyComboBox()
combo.addItems(['apple', 'banana', 'cherry'])
combo.show()
sys.exit(app.exec_())
上面的代码创建了一个 MyComboBox 对象,添加了一些选项,并显示出来。运行程序,我们会看到在组合框里面添加了一张背景图片。
示例 1:
from PyQt5.QtWidgets import QComboBox, QApplication
from PyQt5.QtGui import QPainter, QBrush, QColor, QPixmap, QStyleOptionComboBox, QPalette
from PyQt5.QtCore import Qt
class MyComboBox(QComboBox):
def __init__(self):
super().__init__()
self.setStyleSheet("QComboBox{background-color:white}")
self.setFixedSize(150, 30)
def paintEvent(self, event):
painter = QPainter(self)
option = QStyleOptionComboBox()
self.initStyleOption(option)
painter.drawPixmap(self.rect(), QPixmap('test.jpg'))
self.style().drawComplexControl(QStyle.CC_ComboBox, option, painter, self)
if __name__ == "__main__":
import sys
app = QApplication(sys.argv)
combo = MyComboBox()
combo.addItems(['apple', 'banana', 'cherry'])
combo.show()
sys.exit(app.exec_())
在这个例子里面,我们将背景图片的文件名改为了 test.jpg。
示例 2:
from PyQt5.QtWidgets import QComboBox, QApplication
from PyQt5.QtGui import QPainter, QBrush, QColor, QPixmap, QStyleOptionComboBox, QPalette
from PyQt5.QtCore import Qt
class MyComboBox(QComboBox):
def __init__(self):
super().__init__()
self.setStyleSheet("QComboBox{background-color:white}")
self.setFixedSize(150, 30)
def paintEvent(self, event):
painter = QPainter(self)
option = QStyleOptionComboBox()
self.initStyleOption(option)
painter.drawPixmap(self.rect(), QPixmap('https://img.alicdn.com/bao/uploaded/i1/725677994/O1CN01fwvxdm1OP8H3ujhJS_!!725677994.jpg'))
self.style().drawComplexControl(QStyle.CC_ComboBox, option, painter, self)
if __name__ == "__main__":
import sys
app = QApplication(sys.argv)
combo = MyComboBox()
combo.addItems(['apple', 'banana', 'cherry'])
combo.show()
sys.exit(app.exec_())
在这个例子里面,我们加载了一个网络图片作为组合框的背景图片。