向其添加内容后调整窗口小部件的大小

时间:2019-07-31 00:53:28

标签: python pyside2

我有一个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调整其大小。 enter image description here

1 个答案:

答案 0 :(得分:0)

有2种方法可以解决问题,但并不理想。

  1. 添加新项目后,请回叫self.combo.setIconSize(QtCore.QSize(40,40))。这将导致窗口小部件展开而不会“推”其他布局中的其他窗口小部件。

OR

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