添加内容后调整小部件的大小

Resize widget after contents are added to it

我有一个 QComboBox 在用户启动程序时开始为空白。稍后,内容被添加到小部件,包括每个索引的图标。如果我在程序启动前添加内容,那么 QComboBox 的图标和大小就完美了。但是如果在程序已经初始化之后添加,那么图标会被裁剪并且尺寸不完美。

from PySide2 import QtWidgets, QtGui, QtCore


class MyWindow(QtWidgets.QWidget):
    def __init__(self):
        super(self.__class__, self).__init__()
        self.setMinimumSize(500,400)
        self.layout = QtWidgets.QVBoxLayout(self)
        self.setLayout(self.layout)

        self.addNow = False

        self.combo = QtWidgets.QComboBox()
        self.btn = QtWidgets.QPushButton('Add Items')

        self.combo.setStyleSheet('font-size: 20px')

        self.layout.addWidget(self.combo)
        self.layout.addWidget(self.btn)

        self.items = ['hi', 'hello', 'goodbye', 'nice day', 'bonjour']
        self.icon = QtGui.QPixmap('checker.png')
        self.combo.setIconSize(QtCore.QSize(40,40))

        if self.addNow:
            self.addItems()
            self.btn.setDisabled(True)

        self.btn.clicked.connect(self.addItems)


    def addItems(self):

        for item in self.items:
            self.combo.addItem(self.icon, item)


import sys
app = QtWidgets.QApplication(sys.argv)
mywin = MyWindow()
mywin.show()
sys.exit(app.exec_())

我尝试了几次 sizePolicy,但都无法调整图标大小。

这是一个照片示例,我可以硬编码 QComboBox 的大小,但理想情况下我希望 QT 在添加内容后调整它的大小。

我有两种方法可以解决这个问题,但它们并不理想。

  1. 添加新项目后调用self.combo.setIconSize(QtCore.QSize(40,40))。这会导致小部件在扩展时不会 "pushing" 相同布局中的其他小部件。

  1. 设置QComboBox的字体大小与像素图的大小相同。添加项目,然后重置样式表。非常hacky。
self.combo.setStyleSheet('font-size: 40px')
self.addItems()
self.combo.setStyleSheet('font-size: 20px')