2015-12-24 25 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時,組合框出現了它應該的大小。這是爲什麼發生?這個問題的解決方案是什麼?我使用PyQt4。還請注意,buildidchangeset的小部件不會顯示任何異常行爲。QCombobox第一次只有更大的尺寸

+0

你有沒有試過評論AdjustToContentsOnFirstShow塊? – Schollii

回答

0

我刪除了setSizePolicysizeAdjustPolicy的代碼。我也刪除了電話self.adjustSize()。這工作。雖然,我不知道爲什麼。