2015-10-18 35 views
6

sto cercando di creare questa geometery:qt GridLayout si estende su più colonne

_ ___ 
| | | 
|1| 3 | 
|_|___| 
    |_2_| 

Dove scatola 1 è alto e magro, la casella 2 è corto e largo. Non riesco a ottenere il layout corretto. Quando copro rowSpan e columnSpan per 1 e 2 da 0 a 1, vedo la casella in basso nella posizione relativa corretta ma l'altezza è errata e la larghezza della casella 1 è errata.

Questo modo qq ha aiutato, ma non ha riparato completamente il mio problema: How to arrange the items in QGridLayout as shown?

import sys 
from PyQt4 import QtGui 
class Example(QtGui.QWidget): 
    def __init__(self): 
     super(Example, self).__init__() 
     self.initUI() 

    def initUI(self): 
     textEdit1 = QtGui.QTextEdit("LHS rectangle")  
     textEdit2 = QtGui.QTextEdit("Bottom rectangle")  
     textEdit3 = QtGui.QTextEdit("Central square")  
     self.gridLayout = QtGui.QGridLayout() 
     self.gridLayout.addWidget(textEdit1, 0, 0, 2, 0) 
     self.gridLayout.addWidget(textEdit2, 2, 1, 0, 2) 
     self.gridLayout.addWidget(textEdit3, 0, 1, 2, 2) 
     self.setLayout(self.gridLayout) 
     self.show() 

def main(): 
    app = QtGui.QApplication(sys.argv) 
    ex = Example() 
    sys.exit(app.exec_()) 

if __name__ == '__main__': 
    main() 
+0

provare a sostituire 0 per 1 intervallo di righe, colonna ('textEdit1,0,0,2,1') – Mel

+0

@tmoreau Sulla mia macchina aggiunge una piccola quantità del widget textEdit2 sopra textEdit3 piuttosto che sotto textEdit3. –

risposta

6

È necessario impostare un allungamento opportuno modificare la quantità di spazio dato ad ogni riga/colonna:

self.gridLayout.addWidget(textEdit1, 0, 0) 
    self.gridLayout.addWidget(textEdit2, 1, 1) 
    self.gridLayout.addWidget(textEdit3, 0, 1) 
    self.gridLayout.setColumnStretch(0, 1) 
    self.gridLayout.setColumnStretch(1, 3) 
    self.gridLayout.setRowStretch(0, 3) 
    self.gridLayout.setRowStretch(1, 1) 

Risultato:

screenshot