PyQt:如何在PyQt4中的QGroupBox内添加网格布局

发布于 2021-01-29 15:00:23

我正在尝试使用PyQt4创建一个应用程序窗口。我想创建一个带有框架的窗口,在该框架内有一些小部件,例如标签和文本编辑器。我将框架创建为QGroupBox以便能够在其上添加标题。我知道当处理框架时,HBox和VBox似乎是首选的布局,但是,我想使用网格布局来管理窗口小部件在框架中的定位,我发现它更易于管理。所以我尝试了这段代码:

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()

这里的主要思想是创建一个hbox,在其中放置QGroupBox,然后在其中放置网格布局。问题在于,在生成的应用程序中,小部件放置在框架的外部,另外我得到了错误:

QLayout:尝试将QLayout“”添加到示例“”,该示例已具有布局QWidget ::
setLayout:试图在示例“”中设置QLayout“”,该示例已具有布局

关注者
0
被浏览
131
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    我通过添加以下语句修改了代码:TracParamFrame.setLayout(hbox)

    添加的代码如下:

    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()
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看