我有一个使用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_())
当我打开组合框时,最后选择的项目的大小将增加,如下图所示:
我试图恢复为默认的qt主题,并且一切正常,因此我怀疑这与我使用的qdarkstyle主题有关。任何帮助或提示,我们将不胜感激!
答案 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)
这有助于删除上一个选定项目的扩展,但是现在组合框的打开速度高于预期,而不是从选择器中下拉出来。
未打开:
已打开:
根据开发人员的意见,将研究此问题,但是他提供的修复程序有很大的改进。希望这可以帮助任何可能遇到类似问题的人! (使用Manjaro作为其操作系统的人也偶然发现了this issue中针对另一个qdarkstyle应用程序所详细描述的错误)