【问题标题】:How to keep QComboBox from expanding last chosen item with qdarkstyle theme如何防止 QComboBox 使用 qdarkstyle 主题扩展最后选择的项目
【发布时间】:2019-07-12 02:02:49
【问题描述】:

我有一个使用 qdarkstyle theme 的 Pyside2 应用程序。我正在尝试使用 QComboBox 小部件,但所选项目被炸得很大,导致小部件无法使用。

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

注意:要运行此代码,您需要 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_())

当我打开组合框时,最后选择的项目将增大,如下图所示:

我尝试恢复到默认的 qt 主题,一切正常,所以我怀疑这与我正在使用的 qdarkstyle 主题有关。非常感谢任何帮助或提示!

【问题讨论】:

  • 好的,我添加了用于使用组合框生成 UI 的代码
  • 我在 Arch Linux 中使用 PySide2 5.13.0 和 qdarkstyle 2.7 没有这个问题:i.imgur.com/RjJwDyR.png,我认为你有一个错误,所以建议你向 qdarkstyle 报告。跨度>
  • 好的,感谢您为我试用。我正在运行 Mint,所以这可能是问题所在。额外编辑:我刚刚检查过,我也有 PySide2 5.13.0 和 qdarkstyle 2.7

标签: python qcombobox qtstylesheets pyside2


【解决方案1】:

这个问题可能是由于我的操作系统或其他一些系统设置造成的,因为这似乎不是一个常见的错误。

在@eyllanesc 尝试复制我的代码并且对他们来说一切正常之后,我在 qdarkstyle 存储库上submitted an issue。其中一位开发者 (@goanpeca) 建议添加以下代码来解决问题:

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

这有助于消除最后选择的项目的扩展,但现在组合框打开得比预期高,而不是从选择器中下拉。

未开封:

已打开:

根据开发人员的说法,这个问题将被调查,但他提供的修复是一个很大的改进。希望这可以帮助任何可能遇到类似问题的人! (使用 Manjaro 作为其操作系统的人也偶然发现了这个错误,详见 this issue 另一个 qdarkstyle 应用程序)

【讨论】:

  • 这解决了我在 Mac OS 上的程序的问题。它不会出现在 Windows 中。
猜你喜欢
  • 2019-03-13
  • 1970-01-01
  • 1970-01-01
  • 2018-06-27
  • 2019-11-05
  • 2017-06-01
  • 2010-09-22
  • 1970-01-01
  • 2021-04-24
相关资源
最近更新 更多