QComboBox setMaxVisible()不适用于融合样式

时间:2019-06-20 15:42:54

标签: python pyqt pyqt5 qcombobox

我一直在教自己如何使用pythonPyQt5来制作UI。 Fusion样式看起来非常不错,但是我注意到,当我将该样式应用于应用程序时,QComboBox命令setMaxVisibleItems不再起作用。取而代之的是,即使应用了QComboBox,融合样式setMaxVisibleItems也会一次显示所有项目(或屏幕大小允许的所有项目)。

我以为我可能使用了错误的命令,所以我删除了融合样式,并尝试设置具有多个不同值的最大可见物品。每个都工作正常,所以我确定它必须是融合样式本身。是否可以更改融合样式的工作方式或强制其应用setMaxVisibleItems?我在下面提供了一些示例代码。

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel, QComboBox, QPushButton

class Example(QMainWindow):

    def __init__(self):
        super().__init__()

        combo = QComboBox(self)
        counter = 1
        while (counter < 21):
            combo.addItem(str(counter))
            counter = counter + 1
        combo.setMaxVisibleItems(5)

        combo.move(50, 50)

        self.qlabel = QLabel(self)
        self.qlabel.move(50,16)

        combo.activated[str].connect(self.onChanged)      

        self.setGeometry(50,50,320,200)
        self.setWindowTitle("QLineEdit Example")
        self.show()

    def onChanged(self, text):
        self.qlabel.setText(text)
        self.qlabel.adjustSize()

if __name__ == '__main__':
    app = QApplication(sys.argv)
    #app.setStyle("fusion")
    ex = Example()
    sys.exit(app.exec_())

应用fusion样式意味着应用程序一次显示所有20个项目。注释掉融合样式意味着应用程序一次显示5个项目。

1 个答案:

答案 0 :(得分:1)

maxVisibleItems property并非所有样式都得到尊重。

  

注意:对于QStyle :: SH_ComboBox_Popup(例如Mac样式或Gtk +样式)返回true的样式,不可编辑的组合框将忽略此属性。

请注意,如果您的组合框是可编辑的,则它可能会按预期工作。样式的行为方式是能够始终如一地匹配其尝试模仿的本机行为。我不知道Fusion不遵守maxVisibleItems的原因。

您始终可以基于Fusion创建自己的样式,以更改特定行为。通常,建议尊重用户对本机样式(或他们配置的样式)的期望,而不要手动设置样式。