我有一个程序,当您按下要添加的按钮时,会动态地向表单添加行。还有另一个按钮可以删除它们。添加作品(并正确调整大小),但是当我删除它们时,它只会恢复一些空间。按钮在可用空间上重新定位,而不是我的过滤器容器缩小。
#!/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_())
答案 0 :(得分:0)
我想出来了,所以我会在这里张贴以防其他人有同样的问题。我没有在拉伸的网格上设置任何行,所以我猜它是随意调整大小。
添加以下行:
self.grid.setRowStretch(3,1)
它告诉它下面的行要拉伸以填充可用空间,所以当行被删除时,它会缩小我想要的行。