簡體   English   中英

PyQt:如何在PyQt4中的QGroupBox內添加網格布局

[英]PyQt : How to add a grid layout inside a QGroupBox in PyQt4

我正在嘗試使用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“”,該示例已具有布局

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

好的,算了,我找到了解決方案。 我必須使用GroupBox的setLayout方法,如下所示:

TracParamFrame.setLayout(grid)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM