【问题标题】:PyQt : How to add a grid layout inside a QGroupBox in PyQt4PyQt:如何在 PyQt4 中的 QGroupBox 内添加网格布局
【发布时间】:2014-01-31 10:53:53
【问题描述】:

我正在尝试使用 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“”

【问题讨论】:

    标签: python layout pyqt4


    【解决方案1】:

    我通过添加以下语句修改了您的代码: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()
    

    【讨论】:

      【解决方案2】:

      好吧,算了,我找到了解决办法。我不得不使用 GroupBox 的 setLayout 方法,如下所示:

      TracParamFrame.setLayout(grid)
      

      【讨论】:

        猜你喜欢
        • 2019-07-23
        • 2017-05-10
        • 1970-01-01
        • 1970-01-01
        • 2019-03-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-05-13
        相关资源
        最近更新 更多