我正在使用PyQt5。我想知道如何让我的 QComboBox 打开 ±10 个项目而不是全屏。仅当应用融合样式时才会发生这种情况。有什么办法可以让我通过一个小的下拉菜单来实现这种行为吗?我尝试过使用
setMaxVisibleItems(5)
,但没有什么区别。
这是现在的样子:
这可以通过代理风格来实现。您只需要重新实现其 styleHint 方法并为
QStyle.SH_ComboBox_Popup返回
False
即可。然后,这将提供一个正常的可滚动列表视图,其中包含最大数量的可见项目,而不是丑陋的巨大菜单。
这是一个简单的演示:
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()