0
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)

我有这段代码,我在QStackedWidget. 当我运行此代码并将我的选择self.select_combo从 from更改为datetorelease时,self.releasew组合框最初显示的大小与QCalendarWidget(这显然看起来很糟糕)的大小相同。但是,当我将选择从更改release为任何其他值然后返回时releaseself.releasew组合框会以应有的大小显示。为什么会这样?这个问题的解决方案是什么?

注意:我正在使用PyQt4. 另请注意,小部件buildid不会changeset显示任何异常行为。

4

1 回答 1

0

我删除了setSizePolicysizeAdjustPolicy代码。我还删除了对self.adjustSize(). 这行得通。虽然,我不知道为什么。

于 2015-12-24T16:48:41.080 回答