Search code examples
resizewidgetpyqtqcomboboxqstackedwidget

QCombobox bigger in size for the first time only


class RangeSelection(QWidget):
    def __init__(self, parent=None):
        QWidget.__init__(self, parent)
        layout = QGridLayout(self)
        self.setLayout(layout)
        self._create_widgets()
        layout.addWidget(self.select_combo, 1, 1)
        layout.addWidget(self.stacked, 1, 2, 5, 1)
        self.stacked.currentWidget().setSizePolicy(
                QSizePolicy.Preferred, QSizePolicy.Preferred)
        self.stacked.currentChanged.connect(self.onCurrentChanged)

    def onCurrentChanged(self):
        currentw = self.stacked.currentWidget()
        currentw.adjustSize()
        if currentw == self.releasew:
            currentw.sizeAdjustPolicy = QComboBox.AdjustToContentsOnFirstShow
        self.adjustSize()

    def _create_widgets(self):
        self.stacked = QStackedWidget()
        self.datew = QCalendarWidget()
        self.datew.setVerticalHeaderFormat(QCalendarWidget.
                                           NoVerticalHeader)
        self.stacked.addWidget(self.datew)
        self.buildidw = QLineEdit()
        self.stacked.addWidget(self.buildidw)
        self.releasew = QComboBox()
        self.releasew.addItems([str(k) for k in sorted(releases())])
        self.stacked.addWidget(self.releasew)
        self.revw = QLineEdit()
        self.stacked.addWidget(self.revw)

        self.select_combo = QComboBox()
        self.select_combo.addItems(['date', 'buildid', 'release', 'changeset'])
        self.select_combo.activated.connect(self.stacked.setCurrentIndex)

I have this code where I am having four widgets in the QStackedWidget. When I run this code and change my selection in self.select_combo from date to release, the self.releasew combobox initially shows up as same size as that of the QCalendarWidget( which obviously looks horrible ). But, when I change my selection from release to any other value and then back to release, the self.releasew combobox shows up in the size it should. Why is this happening? What is the solution to this problem?

Note: I am using PyQt4. Also note that widgets for buildid and changeset do not show any abnormal behaviour.


Solution

  • I removed the setSizePolicy and sizeAdjustPolicy code. I also removed the call to self.adjustSize(). This worked. Though, I don't know why.