QComboBox下拉列表在Linux上不正确

QComboBox dropdown not proper on Linux

本文关键字:不正确 Linux 下拉列表 QComboBox      更新时间:2024-05-11

在Windows上:当我从不可编辑的组合框下拉列表中选择任何项目时,每次下拉列表都会向下打开,因为这就是QT在窗口上原生实现它的方式。

在Linux上:当我从下拉列表中选择第一个项目时,它会向下打开,但如果我选择任何其他项目,然后再次打开下拉列表,那么它不会完全向下展开,有些项目是向上的,有些是向下的,因为Linux的本机主题。

有什么简单的方法可以让它类似于窗口,使整个下拉列表向下打开?

此行为不取决于操作系统,而是取决于所使用的QStyle(例如,我使用KDE plasma提供的样式,该样式具有您想要的行为,但如果我使用融合样式,则会得到您不想要的行为(。因此,考虑到以上情况,一个可能的解决方案是在弹出窗口显示后修改其位置。

import sys
from PyQt5 import QtCore, QtGui, QtWidgets

class ComboBox(QtWidgets.QComboBox):
def showPopup(self):
super().showPopup()
container = self.view().parentWidget()
gp = self.mapToGlobal(self.rect().bottomLeft())
container.move(gp)

def main():
app = QtWidgets.QApplication(sys.argv)
combo = ComboBox()
combo.addItems([f"item {i}" for i in range(4)])
combo.show()
ret = app.exec_()
sys.exit(app.exec_())

if __name__ == "__main__":
main()