PyQt网格布局整合小部件

6
例如,我有一个GUI界面,它包含了label1+line_edit1label2+line_edit2button1button2button3。通常来说,代码看起来会像这样:
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)

但是有没有一种方法可以将label1+line_edit1label2+line_edit2组合起来,使其变成以下形式:

[label1                    
 line edit1               ] -> (0,0,1,3)
[label2                    
 line edit2               ] -> (1,0,1,3)
[button1][button2][button3] -> (2,x,1,1)

所以基本上label1 + line edit1会占据网格布局的第0行,label2 + line edit2会占据第1行,依此类推...
1个回答

10

创建第二个布局用作子布局,将您的小部件添加到其中,并使用addLayout()代替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)

你能否展示一下我写的示例代码是什么样子的? - Krin123
我已经添加了一个例子。 - user3419537

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接