2015-12-24 3 views
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 от date до release, то поле со списком self.releasew первоначально отображается таким же размером, как и у QCalendarWidget (что явно выглядит ужасно). Но, когда я меняю свой выбор с release на любое другое значение, а затем обратно на release, выпадающее поле self.releasew появляется в размере, который должен. Почему это происходит? Каково решение этой проблемы?QCombobox больше в размере только в первый раз

Примечание: Я использую PyQt4. Также обратите внимание, что виджеты для buildid и changeset не показывают никаких ненормальных действий.

+0

Вы пробовали комментировать среду AdjustToContentsOnFirstShow? – Schollii

ответ

0

Я удалил код setSizePolicy и sizeAdjustPolicy. Я также удалил звонок до self.adjustSize(). Это сработало. Хотя, я не знаю, почему.