QComboBox 列表弹出以 Fusion 风格显示

问题描述 投票:0回答:1

我正在使用PyQt5。我想知道如何让我的 QComboBox 打开 ±10 个项目而不是全屏。仅当应用融合样式时才会发生这种情况。有什么办法可以让我通过一个小的下拉菜单来实现这种行为吗?我尝试过使用

setMaxVisibleItems(5)
,但没有什么区别。

这是现在的样子:

example

python user-interface pyqt5 qcombobox
1个回答
0
投票

这可以通过代理风格来实现。您只需要重新实现其 styleHint 方法并为

QStyle.SH_ComboBox_Popup
返回 False 即可。然后,这将提供一个正常的可滚动列表视图,其中包含最大数量的可见项目,而不是丑陋的巨大菜单。

这是一个简单的演示:

screenshot

from PyQt5 import QtWidgets
# from PyQt6 import QtWidgets

class ProxyStyle(QtWidgets.QProxyStyle):
    def styleHint(self, hint, option, widget, data):
        if hint == QtWidgets.QStyle.StyleHint.SH_ComboBox_Popup:
            return False
        return super().styleHint(hint, option, widget, data)

class Window(QtWidgets.QWidget):
    def __init__(self):
        super().__init__()
        self.combo = QtWidgets.QComboBox()
        self.combo.addItems(f'Item-{i:02}' for i in range(1, 50))
        layout = QtWidgets.QVBoxLayout(self)
        layout.addWidget(self.combo)

if __name__ == '__main__':

    style = ProxyStyle('fusion')
    QtWidgets.QApplication.setStyle(style)

    app = QtWidgets.QApplication(['Combo Test'])
    window = Window()
    window.setGeometry(600, 100, 200, 75)
    window.show()
    app.exec()
© www.soinside.com 2019 - 2024. All rights reserved.