QtPy5 GridLayout行调整大小

时间:2018-02-08 21:29:05

标签: python pyqt5

我有一个程序,当您按下要添加的按钮时,会动态地向表单添加行。还有另一个按钮可以删除它们。添加作品(并正确调整大小),但是当我删除它们时,它只会恢复一些空间。按钮在可用空间上重新定位,而不是我的过滤器容器缩小。

#!/usr/bin/python
# pylint: disable=missing-docstring 
# pylint: disable=no-name-in-module 
# pylint: disable=unused-import 

import sys

from PyQt5.QtWidgets import (QWidget, QLabel, QVBoxLayout,
    QGridLayout, QApplication, QPushButton, QHBoxLayout)
from PyQt5.QtGui import QGuiApplication

class MainWindow(QWidget):

    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        grid = QGridLayout()
        grid.setSpacing(10)

        testLabel = QLabel("Placeholder")
        testLabel2 = QLabel("Placeholder")
        grid.addWidget(testLabel, 0, 0, 1, 2)
        grid.addWidget(testLabel2, 2, 0, 1, 2)
        filterContainer = FilterContainer()
        grid.addLayout(filterContainer, 1, 0, 1, 2)

        self.setLayout(grid)
        self.setGeometry(300, 300, 250, 150)        
        self.setWindowTitle('Example')    
        self.show()

class FilterContainer(QVBoxLayout):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.addRow()

    def addRow(self):
        rw = FilterRow()
        rw.btnAdd.clicked.connect(self.addRow)
        self.addLayout(rw)

class FilterRow(QHBoxLayout):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.btnDelete = QPushButton('Delete')
        self.btnDelete.clicked.connect(self.deleteSelf)
        self.addWidget(self.btnDelete)

        self.btnAdd = QPushButton('Add')
        self.addWidget(self.btnAdd)

    def deleteSelf(self): 
        if self is not None: 
            while self.count(): 
                item = self.takeAt(0) 
                widget = item.widget() 
                if widget is not None: 
                    widget.deleteLater()


if __name__ == '__main__':
    app = QApplication(sys.argv)
    mw = MainWindow()
    sys.exit(app.exec_())

1 个答案:

答案 0 :(得分:0)

我想出来了,所以我会在这里张贴以防其他人有同样的问题。我没有在拉伸的网格上设置任何行,所以我猜它是随意调整大小。

添加以下行:

self.grid.setRowStretch(3,1)

它告诉它下面的行要拉伸以填充可用空间,所以当行被删除时,它会缩小我想要的行。