📌  相关文章
📜  PyQt5 ComboBox – 与向下箭头不同的边框大小(1)

📅  最后修改于: 2023-12-03 15:03:56.755000             🧑  作者: Mango

PyQt5 ComboBox – 与向下箭头不同的边框大小

在 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 边框和下拉箭头边框的大小和颜色不同的效果。

参考资料:

  • https://doc.qt.io/qt-5/stylesheet-examples.html#customizing-qcombobox
  • https://doc.qt.io/qt-5/stylesheet-reference.html#border-prop
  • https://doc.qt.io/qt-5/stylesheet-reference.html#subcontrol-origin-prop