2014-01-31 40 views
1

我試圖用PyQt4創建應用程序窗口。我想創建一個帶有框架的窗口,並在框架內部添加一些小部件,如標籤和文本編輯器。 我創建了框架作爲一個QGroupBox,以便能夠在其上放置一個標題。 我知道HBox和VBox似乎是處理幀時的首選佈局,但是,我想用網格佈局來管理框架內部的窗口小部件的位置,我發現它更易於管理。 所以,我想這段代碼:PyQt:如何在PyQt4中的QGroupBox中添加網格佈局

import sys 
from PyQt4 import QtGui, QtCore 

class Example(QtGui.QWidget): 

    def __init__(self): 
     super(Example, self).__init__() 

     self.initUI() 

def initUI(self):  

    hbox = QtGui.QHBoxLayout() 
    grid = QtGui.QGridLayout() 

    #Definition des Tracing Parameters widgets 
    WindowSize = QtGui.QLabel("Window size (m)") 
    SampPts = QtGui.QLabel("Sampling points") 
    WindowSizeEdit = QtGui.QLineEdit() 
    SampPtsEdit = QtGui.QLineEdit() 
    TracParamFrame = QtGui.QGroupBox(self) 
    TracParamFrame.setTitle("Tracing Parameters") 
    hbox.addLayout(grid) 

    grid.addWidget(WindowSize,0,0) 
    grid.addWidget(WindowSizeEdit,0,1) 
    grid.addWidget(SampPts,1,0) 
    grid.addWidget(SampPtsEdit,1,1) 

    self.setLayout(hbox) 

    self.setGeometry(300,300,350,300) 
    self.show() 


def main(): 

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


if __name__ == '__main__': 
    main() 

主要這裏的想法是創建一個橫向盒,我把QGroupBox,然後將裏面的網格佈局。 的問題是,所產生的應用中,窗口小部件被放置在框架的外面,另外我得到的錯誤:

QLayout:試圖添加QLayout「」實施例「」,它已經具備了佈局 QWidget的:: setLayout:試圖在示例「」上設置QLayout「」,它已經有一個佈局

回答

2

我修改你的代碼中,添加以下語句:TracParamFrame.setLayout(橫向盒)

與此添加的代碼如下:

import sys 
from PyQt4 import QtGui, QtCore 

class Example(QtGui.QWidget): 

    def __init__(self): 
     super(Example, self).__init__() 

     self.initUI() 
    def initUI(self): 
     hbox = QtGui.QHBoxLayout() 
     grid = QtGui.QGridLayout() 

     #Definition des Tracing Parameters widgets 
     WindowSize = QtGui.QLabel("Window size (m)") 
     SampPts = QtGui.QLabel("Sampling points") 
     WindowSizeEdit = QtGui.QLineEdit() 
     SampPtsEdit = QtGui.QLineEdit() 
     TracParamFrame = QtGui.QGroupBox(self) 
     TracParamFrame.setTitle("Tracing Parameters") 
     hbox.addLayout(grid) 

     grid.addWidget(WindowSize,0,0) 
     grid.addWidget(WindowSizeEdit,0,1) 
     grid.addWidget(SampPts,1,0) 
     grid.addWidget(SampPtsEdit,1,1) 
     TracParamFrame.setLayout(hbox) 

     #self.setLayout(hbox) 


     self.setGeometry(300,300,350,300) 
     self.show() 

def main(): 

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


if __name__ == '__main__': 
    main() 
1

好吧忘了它,我找到了解決方案。我不得不使用分組框的setLayout的方法如下:

TracParamFrame.setLayout(grid)