我在主布局上做了三个QVboxlayout,第二个QVboxlayout有三个子QHBoxlayout,它有复选框和组框。
第二,QVboxlayout有一个名为checkboxlayout的布局。
单击Make按钮时,第二个QVBoxlayout (=复选框布局)将显示20x3复选框和groupbox。
另外,单击“第二个Make”按钮,我需要清除框和标签,但是PyQT在布局之前覆盖。
重复指数 (参见索引编号显示重复:1和2)
如果没有self.checkboxlayout.takeAt(0)代码,那么PyQT将生成相同的复选框底部
如何删除第一个复选框布局,以获得清晰的第二个复选框布局?
def initUI(self):
self.clickedidx = 0
self.lineEdit1 = QLineEdit()
self.pushButton1 = QPushButton(" Make ")
self.pushButton2 = QPushButton(" I am dumb ")
self.pushButton1.clicked.connect(self.onEnter)
self.hlayout = QHBoxLayout()
self.vlayout = QVBoxLayout()
self.hlayout.addWidget(QLabel('Link:'), alignment=Qt.AlignTop)
self.hlayout.addWidget(self.lineEdit1, alignment=Qt.AlignTop)
self.hlayout.addWidget(self.pushButton1, alignment=Qt.AlignTop)
self.vlayout.addLayout(self.hlayout)
self.checkboxlayout = QVBoxLayout()
self.vlayout.addLayout(self.checkboxlayout)
self.hlayout = QHBoxLayout()
self.hlayout.addWidget(self.pushButton2, alignment=Qt.AlignBottom)
self.vlayout.addLayout(self.hlayout)
self.setLayout(self.vlayout)
self.center()
self.show()
def onEnter(self):
self.clickedidx += 1
groupbox = QGroupBox()
checkbox = []
hlayout = QHBoxLayout()
vlayout = QVBoxLayout()
for i in range(1, 21):
widget = QCheckBox( num2words(i) + " " + str(self.clickedidx) )
vlayout.addWidget(widget)
groupbox.setLayout(vlayout)
hlayout.addWidget(groupbox)
groupbox = QGroupBox()
vlayout = QVBoxLayout()
for i in range(21, 41):
widget = QCheckBox( num2words(i) + " " + str(self.clickedidx) )
vlayout.addWidget(widget)
groupbox.setLayout(vlayout)
hlayout.addWidget(groupbox)
groupbox = QGroupBox()
vlayout = QVBoxLayout()
for i in range(41, 61):
widget = QCheckBox( num2words(i) + " " + str(self.clickedidx) )
vlayout.addWidget(widget)
groupbox.setLayout(vlayout)
hlayout.addWidget(groupbox)
self.checkboxlayout.takeAt(0)
self.checkboxlayout.addLayout(hlayout)
发布于 2022-08-11 08:55:32
解决了。
我修改/添加了onEnter()方法的代码末尾
item = self.checkboxlayout.takeAt(0)
self.checkboxlayout.addLayout(hlayout)
if self.clickedidx > 1 :
widget = item.widget()
if widget is not None:
widget.setParent(None)
else:
deleteItemsOfLayout( item.layout() )
并增加了函数deleteItemsOfLayout(布局)
def deleteItemsOfLayout(layout):
if layout is not None:
while layout.count():
item = layout.takeAt(0)
widget = item.widget()
if widget is not None:
widget.setParent(None)
else:
deleteItemsOfLayout(item.layout())
问题是self.checkboxlayout.takeAt(0)删除了旧的复选框布局,
但是不删除旧的小部件,所以结果显示了重复的小部件。
在这方面提供了帮助:
https://stackoverflow.com/questions/73315298
复制相似问题