Reputation: 343
so for example, I have a GUI that has a label1
+line_edit1
, label2
+line_edit2
, button1
, button2
, button3
. In a normal sense the code would look somewhat like this:
class gridlayout_example(QtGui.QWidget):
def __init__(self):
self.grid_layout = QtGui.QGridLayout()
self.label1 = QtGui.QLabel("label1")
self.grid_layout.addWidget(self.label1,0,0,1,3)
self.line_edit1 = QtGui.QLineEdit()
self.grid_layout.addWidget(self.line_edit1,1,0,1,3)
self.label2 = QtGui.QLabel("label2")
self.grid_layout.addWidget(self.label1,2,0,1,3)
self.line_edit2 = QtGui.QLineEdit()
self.grid_layout.addWidget(self.line_edit2,3,0,1,3)
self.button1 = QtGui.QPushButton("button1")
self.button2 = QtGui.QPushButton("button2")
self.button3 = QtGui.QPushButton("button3")
self.grid_layout.addWidget(self.button1, 4,0,1,1)
self.grid_layout.addWidget(self.button2, 4,1,1,1)
self.grid_layout.addWidget(self.button3, 4,2,1,1)
self.setLayout(self.grid_layout)
But is there a way to combine label1
+line_edit1
and label2
+ line_edit2
so it becomes something like:
[label1
line edit1 ] -> (0,0,1,3)
[label2
line edit2 ] -> (1,0,1,3)
[button1][button2][button3] -> (2,x,1,1)
so basically label1+line edit1 would occupy row 0 of the grid layout, label2 + line edit2 occupy row1 and so on...
Upvotes: 6
Views: 10807
Reputation: 5000
Create a second layout to use as a sublayout, add your widgets to it, and use addLayout()
in place of addWidget()
class gridlayout_example(QtGui.QWidget):
def __init__(self, parent=None):
super(gridlayout_example, self).__init__(parent)
label1 = QtGui.QLabel('label 1')
line_edit1 = QtGui.QLineEdit()
sublayout1 = QtGui.QVBoxLayout()
sublayout1.addWidget(label1)
sublayout1.addWidget(line_edit1)
label2 = QtGui.QLabel('label 2')
line_edit2 = QtGui.QLineEdit()
sublayout2 = QtGui.QVBoxLayout()
sublayout2.addWidget(label2)
sublayout2.addWidget(line_edit2)
button1 = QtGui.QPushButton("button1")
button2 = QtGui.QPushButton("button2")
button3 = QtGui.QPushButton("button3")
grid_layout = QtGui.QGridLayout(self)
grid_layout.addLayout(sublayout1, 0, 0, 1, 3)
grid_layout.addLayout(sublayout2, 1, 0, 1, 3)
grid_layout.addWidget(button1, 2, 0, 1, 1)
grid_layout.addWidget(button2, 2, 1, 1, 1)
grid_layout.addWidget(button3, 2, 2, 1, 1)
Upvotes: 10