代码之家  ›  专栏  ›  技术社区  ›  Velidan

PyQT更改内部QVBoxLayout在GridLayout中的位置

  •  0
  • Velidan  · 技术社区  · 8 年前

    我正在使用PyQT,我有一个非常简单的结构网格布局和进入这个网格的内部BoxLayout(下面由QtDesigner生成的代码)。抱歉,这是个丑陋的风景)

    self.gridLayout.addLayout(self.buttonsLayer, 2, 0, 1, 2)
    

    后来我试图通过执行这个指令来改变它的位置(我想把这个布局移到GridLayout的3行)

    self.gridLayout.addLayout(self.buttonsLayer, 3, 0, 1, 2)
    

    QLayout::addChildLayout:layout“buttonsLayer”已具有父级

     MainWindow.setObjectName("MainWindow")
        MainWindow.resize(608, 173)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.verticalLayout = QtWidgets.QVBoxLayout(self.centralwidget)
        self.verticalLayout.setObjectName("verticalLayout")
        self.gridLayout = QtWidgets.QGridLayout()
        self.gridLayout.setObjectName("gridLayout")
        self.addFileBtn_0 = QtWidgets.QPushButton(self.centralwidget)
        self.addFileBtn_0.setObjectName("addFileBtn_0")
        self.gridLayout.addWidget(self.addFileBtn_0, 0, 0, 1, 1)
        self.lineEditFile_0 = QtWidgets.QLineEdit(self.centralwidget)
        self.lineEditFile_0.setText("")
        self.lineEditFile_0.setObjectName("lineEditFile_0")
        self.gridLayout.addWidget(self.lineEditFile_0, 0, 1, 1, 1)
        self.addFileBtn_1 = QtWidgets.QPushButton(self.centralwidget)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.addFileBtn_1.sizePolicy().hasHeightForWidth())
        self.addFileBtn_1.setSizePolicy(sizePolicy)
        self.addFileBtn_1.setObjectName("addFileBtn_1")
        self.gridLayout.addWidget(self.addFileBtn_1, 1, 0, 1, 1)
        self.lineEditFile_1 = QtWidgets.QLineEdit(self.centralwidget)
        self.lineEditFile_1.setObjectName("lineEditFile_1")
        self.gridLayout.addWidget(self.lineEditFile_1, 1, 1, 1, 1)
        self.buttonsLayer = QtWidgets.QVBoxLayout()
        self.buttonsLayer.setObjectName("buttonsLayer")
        self.addFileGroupBtn = QtWidgets.QPushButton(self.centralwidget)
        self.addFileGroupBtn.setObjectName("addFileGroupBtn")
        self.buttonsLayer.addWidget(self.addFileGroupBtn)
        self.saveConfigBtn = QtWidgets.QPushButton(self.centralwidget)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.saveConfigBtn.sizePolicy().hasHeightForWidth())
        self.saveConfigBtn.setSizePolicy(sizePolicy)
        self.saveConfigBtn.setObjectName("saveConfigBtn")
        self.buttonsLayer.addWidget(self.saveConfigBtn)
        self.gridLayout.addLayout(self.buttonsLayer, 2, 0, 1, 2)
    
    2 回复  |  直到 8 年前
        1
  •  2
  •   Velidan    8 年前

    经过10-20次不同的尝试,以实现我想要的和本机QT文档调查,我终于找到了一个可能的解决方案。我不确定这是否是一种理想的方法,但它确实有效。如果你有更好的解决方案-请告诉我!我会被分配的。

    这是解决办法

    #  remove this item(it's  aLayout so we can't use removeWidget) from GridLayout
    self.gridLayout.removeItem(self.buttonsLayer)
    
    # now we can insert it into some new place. Voalia =)
    self.gridLayout.addLayout(self.buttonsLayer, self.fieldGroupCounter + 1, 0, 1, 2)
    

    希望它能帮助别人!谨致问候。

        2
  •  0
  •   S. Nick    8 年前

    试试看:

    from PyQt5 import QtCore, QtGui, QtWidgets
    
    class Ui_MainWindow(object):
        def setupUi(self, MainWindow):
            MainWindow.setObjectName("MainWindow")
            MainWindow.resize(608, 173)
            self.centralwidget = QtWidgets.QWidget(MainWindow)
            self.centralwidget.setObjectName("centralwidget")
    
            self.verticalLayout = QtWidgets.QVBoxLayout(self.centralwidget)
            self.verticalLayout.setObjectName("verticalLayout")
    
            self.gridLayout = QtWidgets.QGridLayout()
            self.gridLayout.setObjectName("gridLayout")
    
            self.verticalLayout.addLayout(self.gridLayout)
    
            self.addFileBtn_0 = QtWidgets.QPushButton(self.centralwidget)
            self.addFileBtn_0.setObjectName("addFileBtn_0")
            self.gridLayout.addWidget(self.addFileBtn_0, 0, 0, 1, 1)
            self.lineEditFile_0 = QtWidgets.QLineEdit(self.centralwidget)
            self.lineEditFile_0.setText("")
            self.lineEditFile_0.setObjectName("lineEditFile_0")
            self.gridLayout.addWidget(self.lineEditFile_0, 0, 1, 1, 1)
            self.addFileBtn_1 = QtWidgets.QPushButton(self.centralwidget)
            sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum)
            sizePolicy.setHorizontalStretch(0)
            sizePolicy.setVerticalStretch(0)
            sizePolicy.setHeightForWidth(self.addFileBtn_1.sizePolicy().hasHeightForWidth())
            self.addFileBtn_1.setSizePolicy(sizePolicy)
            self.addFileBtn_1.setObjectName("addFileBtn_1")
            self.gridLayout.addWidget(self.addFileBtn_1, 1, 0, 1, 1)
            self.lineEditFile_1 = QtWidgets.QLineEdit(self.centralwidget)
            self.lineEditFile_1.setObjectName("lineEditFile_1")
            self.gridLayout.addWidget(self.lineEditFile_1, 1, 1, 1, 1)
            self.buttonsLayer = QtWidgets.QVBoxLayout()
            self.buttonsLayer.setObjectName("buttonsLayer")
            self.addFileGroupBtn = QtWidgets.QPushButton(self.centralwidget)
            self.addFileGroupBtn.setObjectName("addFileGroupBtn")
            self.buttonsLayer.addWidget(self.addFileGroupBtn)
            self.saveConfigBtn = QtWidgets.QPushButton(self.centralwidget)
            sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Fixed)
            sizePolicy.setHorizontalStretch(0)
            sizePolicy.setVerticalStretch(0)
            sizePolicy.setHeightForWidth(self.saveConfigBtn.sizePolicy().hasHeightForWidth())
            self.saveConfigBtn.setSizePolicy(sizePolicy)
            self.saveConfigBtn.setObjectName("saveConfigBtn")
            self.buttonsLayer.addWidget(self.saveConfigBtn)
            self.gridLayout.addLayout(self.buttonsLayer, 2, 0, 1, 2)
    
            MainWindow.setCentralWidget(self.centralwidget)
    
            self.menubar = QtWidgets.QMenuBar(MainWindow)
            self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 24))
            self.menubar.setObjectName("menubar")
            MainWindow.setMenuBar(self.menubar)
            self.statusbar = QtWidgets.QStatusBar(MainWindow)
            self.statusbar.setObjectName("statusbar")
            MainWindow.setStatusBar(self.statusbar)
    
            self.retranslateUi(MainWindow)
            QtCore.QMetaObject.connectSlotsByName(MainWindow)
    
        def retranslateUi(self, MainWindow):
            _translate = QtCore.QCoreApplication.translate
            MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
    
    
    if __name__ == "__main__":
        import sys
        app = QtWidgets.QApplication(sys.argv)
        MainWindow = QtWidgets.QMainWindow()
        ui = Ui_MainWindow()
        ui.setupUi(MainWindow)
        MainWindow.show()
        sys.exit(app.exec_())    
    

    enter image description here