2013-12-08 9 views
12

Sto facendo un'esercitazione con PyQt4 sui layout della scatola. Ma non capisco come funziona addStretch.Come funziona addStretch in QBoxLayout?

  • Se uso vbox.addStretch(1) e hbox.addStretch(1), i due pulsanti appaiono in basso a destra. Perché?
  • se commento vbox.addStretch(1) e hbox.addStretch(1), i due pulsanti appaiono al centro della finestra e sono deformabili orizzontalmente, ma non verticalmente. Perché?
  • non c'è differenza se cambio il valore "1" ... quindi cosa fa il valore?

Di seguito è il codice che sto utilizzando:

import sys 
from PyQt4 import QtGui 

class BoxLayout(QtGui.QWidget): 
    def __init__(self, parent=None): 
     QtGui.QWidget.__init__(self, parent) 

     self.setWindowTitle('box layout') 

     ok = QtGui.QPushButton("OK") 
     cancel = QtGui.QPushButton("Cancel") 

     vbox = QtGui.QHBoxLayout() 
     vbox.addStretch(1) 
     vbox.addWidget(ok) 
     vbox.addWidget(cancel) 

     hbox = QtGui.QVBoxLayout() 
     hbox.addStretch(1) 
     hbox.addLayout(vbox) 

     self.setLayout(hbox) 

     self.resize(100, 100) 

app = QtGui.QApplication(sys.argv) 
qb = BoxLayout() 
qb.show() 
sys.exit(app.exec_()) 

risposta

16

Il metodo addStretch aggiunge un QSpacerItem alla fine di un layout di scatola. Un QSpacerItem è uno spazio vuoto regolabile.

  1. Uso vbox.addStretch(1) aggiungerà un distanziatore-elemento di ampiezza zero che espande verticalmente dalla sommità del layout basso.

    L'utilizzo di hbox.addStretch(1) consente di aggiungere un distanziatore di larghezza zero che si espande orizzontalmente dalla sinistra del layout verso destra.

  2. Senza allungamento, il layout sarà determinato dal sizePolicy dei widget. Per un QPushButton, questo è QSizePolicy.Fixed per la dimensione verticale e QSizePolicy.Minimum per la dimensione orizzontale. Se si voleva i pulsanti di espandersi in entrambe le direzioni, si potrebbe fare qualcosa di simile:

    ok.setSizePolicy(QtGui.QSizePolicy.Minimum, 
            QtGui.QSizePolicy.Minimum) 
        cancel.setSizePolicy(QtGui.QSizePolicy.Minimum, 
             QtGui.QSizePolicy.Minimum) 
    
  3. L'argomento passato alla addStretch cambia l'allungamento. Se si aggiunge un secondo tratto dopo il pulsante OK:

    vbox = QtGui.QHBoxLayout() 
        vbox.addStretch(1) 
        vbox.addWidget(ok) 
        vbox.addStretch(2) 
        vbox.addWidget(cancel) 
    

    si vedrà che il secondo articolo distanziatore cresce due volte più veloce del prima. E se imposti il ​​primo allungamento a zero, non crescerà a tutti.

Se volete maggiori informazioni, si veda l'articolo Layout Management nella documentazione Qt. È anche una buona idea usare Qt Designer per sperimentare cose come questa, poiché ti dà un feedback visivo immediato e ti mostra tutti i valori predefiniti delle varie proprietà coinvolte.