PyQT改变GridLayout中内部QVBoxLayout的位置

时间:2018-06-17 17:58:34

标签: python-3.x position pyqt5

我正在使用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)

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)

试一试:

rank()

enter image description here