2014-10-30 19 views
3

所以例如,我有具有label1 + line_edit1label2 + line_edit2button1button2button3的GUI。在通常意義上的代碼看起來有點像這樣:PyQt的GridLayout的組合部件

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 + line1將佔據網格佈局的第0行,label2 + line2佔據第1行,等等......

回答

4

創建第二個佈局以用作子佈局,添加您的小部件,並使用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) 
+0

你能告訴我它與我寫的例子代碼的樣子嗎? – Krin123 2014-11-03 18:41:28

+0

我已經添加了一個例子 – user3419537 2014-11-03 19:17:48