You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PyQt5 Fusion风格下QComboBox下拉框显示范围调整问题

PyQt5 Fusion风格下QComboBox下拉框显示行数调整方案

问题原因

Fusion风格的QComboBox默认会忽略setMaxVisibleItems()的设置,这是因为该风格的下拉框实现逻辑特殊,会根据内容自动拉伸高度。

解决方法

方法一:用样式表强制限制高度

结合setMaxVisibleItems()和样式表,直接指定下拉列表的最大高度:

from PyQt5.QtWidgets import QApplication, QComboBox, QWidget, QVBoxLayout

app = QApplication([])
app.setStyle("Fusion")

window = QWidget()
layout = QVBoxLayout(window)

combo = QComboBox()
# 添加测试选项
for i in range(20):
    combo.addItem(f"选项 {i+1}")
combo.setMaxVisibleItems(10)
# 按10项高度设置(每项约25px,可根据实际调整数值)
combo.setStyleSheet("""
    QComboBox QAbstractItemView {
        max-height: 250px;
    }
""")

layout.addWidget(combo)
window.show()
app.exec_()

方法二:重写showPopup()方法

通过重写控件的弹出方法,动态计算并设置下拉视图的高度:

from PyQt5.QtWidgets import QApplication, QComboBox, QWidget, QVBoxLayout, QAbstractItemView

class CustomComboBox(QComboBox):
    def showPopup(self):
        super().showPopup()
        view = self.view()
        # 按最大可见项数计算高度
        view.setMaximumHeight(view.sizeHintForRow(0) * self.maxVisibleItems())

app = QApplication([])
app.setStyle("Fusion")

window = QWidget()
layout = QVBoxLayout(window)

combo = CustomComboBox()
for i in range(20):
    combo.addItem(f"选项 {i+1}")
combo.setMaxVisibleItems(10)

layout.addWidget(combo)
window.show()
app.exec_()

说明

  • 方法一操作简单,适合快速调整;
  • 方法二更灵活,能自动适配不同字体或项高的场景。

内容的提问来源于stack exchange,提问作者EchoLab

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 10:22:04