📅  最后修改于: 2023-12-03 15:03:56.755000             🧑  作者: Mango
在 PyQt5 中,ComboBox 组件提供了一个下拉列表,可以选择其中的项。默认情况下,ComboBox 的边框大小与其他组件的边框大小相同。但是,有时我们需要在 ComboBox 中将下拉箭头的边框与框的边框大小区分开来,这篇文章将介绍如何实现这样的效果。
我们将会使用 QSS(Qt样式表)来定义 ComboBox 的外观。具体而言,我们将使用 QSS 中的 border 和 subcontrol-origin 属性分别控制 ComboBox 边框和下拉箭头边框的大小。
from PyQt5.QtWidgets import QApplication, QComboBox, QVBoxLayout, QWidget
app = QApplication([])
window = QWidget()
layout = QVBoxLayout()
combo = QComboBox()
combo.addItems(['Item 1', 'Item 2', 'Item 3'])
# 设置 ComboBox 的边框
combo.setStyleSheet('''
QComboBox {
border: 2px solid gray;
border-radius: 8px;
padding: 1px 18px 1px 3px;
min-width: 6em;
}
''')
# 设置 ComboBox 下拉箭头的边框
combo.view().setStyleSheet('''
QAbstractItemView {
border-top: 2px solid gray;
selection-background-color: lightgray;
}
QListView::item {
height: 26px; /* or whatever */
}
QListView::item:selected {
background: lightgray;
}
QScrollBar:vertical {
width: 10px;
background: gray;
}
QScrollBar::handle:vertical {
background: white;
}
''')
layout.addWidget(combo)
window.setLayout(layout)
window.show()
app.exec_()
在上面的代码中,我们首先创建了一个 QComboBox 对象,然后使用 setStyleSheet() 方法设置边框的大小和颜色。接下来,我们调用了 combo.view() 方法来获取 ComboBox 下拉列表的视图,然后设置其边框的颜色和样式。这里,我们使用了 QListView::item:selected 的样式来设置选中的项的背景颜色,同时定义了一些滚动条的样式。
通过以上步骤,我们可以成功实现 ComboBox 边框和下拉箭头边框的大小和颜色不同的效果。
参考资料: