如何防止QComboBox扩展带有qdarkstyle主题的最后选择的项目

时间:2019-07-12 02:02:49

标签: python qcombobox qtstylesheets pyside2

我有一个使用qdarkstyle theme的Pyside2应用程序。我正在尝试使用QComboBox窗口小部件,但是所选项目被炸成很大的尺寸,导致该窗口小部件不可用。

相关的UI设置代码,我曾使用MainWindow创建添加组合框(由pyuic5生成)以提供可重现的示例:

注意:要运行此代码,您将需要qdarkstyle主题以及PySide2,可以将其安装: pip install qdarkstyle

from PySide2 import QtCore, QtGui, QtWidgets
import qdarkstyle
import sys

class Ui_Dialog(object):
    def setupUi(self, Dialog):
        Dialog.setObjectName("Dialog")
        Dialog.resize(875, 527)
        self.comboBox = QtWidgets.QComboBox(Dialog)
        self.comboBox.setObjectName("comboBox")
        self.comboBox.addItem("")
        self.comboBox.addItem("")
        self.comboBox.addItem("")
        self.comboBox.addItem("")
        self.comboBox.addItem("")
        self.comboBox.addItem("")
        self.comboBox.addItem("")
        self.comboBox.addItem("")
        self.retranslateUi(Dialog)
        self.comboBox.setCurrentIndex(4)
        QtCore.QMetaObject.connectSlotsByName(Dialog)

    def retranslateUi(self, Dialog):
        _translate = QtCore.QCoreApplication.translate
        Dialog.setWindowTitle(_translate("Dialog", "Dialog"))
        self.comboBox.setItemText(0, _translate("Dialog", "1 day"))
        self.comboBox.setItemText(1, _translate("Dialog", "1 week"))
        self.comboBox.setItemText(2, _translate("Dialog", "3 months"))
        self.comboBox.setItemText(3, _translate("Dialog", "6 months"))
        self.comboBox.setItemText(4, _translate("Dialog", "1 year"))
        self.comboBox.setItemText(5, _translate("Dialog", "3 years"))
        self.comboBox.setItemText(6, _translate("Dialog", "5 years"))
        self.comboBox.setItemText(7, _translate("Dialog", "max"))

class Dialog(QtWidgets.QDialog):
    def __init__(self):
        super(Dialog, self).__init__()
        self.ui = Ui_Dialog()
        self.ui.setupUi(self)

if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    window = Dialog()
    window.show()
    app.setStyleSheet(qdarkstyle.load_stylesheet_pyside2())
    sys.exit(app.exec_())

当我打开组合框时,最后选择的项目的大小将增加,如下图所示: blown up item in combobox

我试图恢复为默认的qt主题,并且一切正常,因此我怀疑这与我使用的qdarkstyle主题有关。任何帮助或提示,我们将不胜感激!

1 个答案:

答案 0 :(得分:0)

此问题可能是由于我的操作系统或某些其他系统设置引起的,因为这似乎不是常见的错误。

在@eyllanesc尝试重现我的代码并且一切正常之后,我submitted an issue进入了qdarkstyle回购。其中一名开发人员(@goanpeca)建议添加以下代码来解决此问题:

from PySide2 import QtCore, QtGui, QtWidgets
...
    delegate = QtWidgets.QStyledItemDelegate()
    self.comboBox = QtWidgets.QComboBox(Dialog)
    self.comboBox.setItemDelegate(delegate)

这有助于删除上一个选定项目的扩展,但是现在组合框的打开速度高于预期,而不是从选择器中下拉出来。

未打开:

Unopened Combobox

已打开:

Opened Combobox

根据开发人员的意见,将研究此问题,但是他提供的修复程序有很大的改进。希望这可以帮助任何可能遇到类似问题的人! (使用Manjaro作为其操作系统的人也偶然发现了this issue中针对另一个qdarkstyle应用程序所详细描述的错误)