我正在使用PyQT,我有非常简单的结构网格布局和内部BoxLayout到这个网格(下面由QtDesigner生成的代码。抱歉它的丑陋视图)
总之,这是我的BoxLayer
self.gridLayout.addLayout(self.buttonsLayer, 2, 0, 1, 2)
后来我尝试通过执行此指令来改变它的位置(我想将此布局移动到GridLayout的3行)
self.gridLayout.addLayout(self.buttonsLayer, 3, 0, 1, 2)
但是我遇到了错误 QLayout :: addChildLayout:layout" buttonsLayer"已经有父母
开始时我在网格布局中有了按钮,但后来我决定将它们推入某个容器并仅移动此容器而不是移动2个对象。但是..奇怪的是,对于单个按钮,这个技巧是有效的,但对于布局它不起作用。
也许有人知道为什么它不起作用,我怎么能改变BoxLayer的位置?感谢您的任何信息!
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)
答案 0 :(得分:1)
经过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)
希望它有所帮助!亲切的问候。
答案 1 :(得分:0)