2015-12-24 1 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) 

J'ai ce code où j'ai quatre widgets dans le QStackedWidget. Lorsque j'exécute ce code et change ma sélection en self.select_combo de date en release, la combobox self.releasew apparaît initialement comme la même taille que celle du QCalendarWidget (ce qui semble évidemment horrible). Mais, quand je change ma sélection de release à n'importe quelle autre valeur et puis de nouveau à release, le combobox self.releasew apparaît dans la taille qu'il devrait. Pourquoi cela arrive-t-il? Quelle est la solution à ce problème? Remarque: J'utilise PyQt4. Notez également que les widgets pour buildid et changeset ne montrent aucun comportement anormal.QCombobox plus grande en taille pour la première fois seulement

+0

avez-vous essayé de commenter le bloc AdjustToContentsOnFirstShow? – Schollii

Répondre

0

J'ai supprimé le code setSizePolicy et sizeAdjustPolicy. J'ai également retiré l'appel à self.adjustSize(). Cela a fonctionné. Cependant, je ne sais pas pourquoi.