yuw*_*wei 5 python qt pyqt pyqt4 pyqt5
datainputHbox = QHBoxLayout()
layout = QVBoxLayout(self)
layout.addLayout(datainputHbox)
pagedatainputdeletboxbutton1.clicked.connect(lambda:self.boxdelete(datainputHbox))
def boxdelete(self, box):
Run Code Online (Sandbox Code Playgroud)
这是 PyQt 程序如何编写 boxdelete 函数以删除 datainputHbox 表单布局。我尝试了很多。但是我只能删除所有小部件,但无法删除布局。
作为一个通用答案:从这里获取,稍作但重要的更改:您不应该调用 widget.deleteLater()。至少就我而言,这导致 python 崩溃
全局功能
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())
Run Code Online (Sandbox Code Playgroud)
与Brendan Abel 的回答中的 boxdelete 功能一起
def boxdelete(self, box):
for i in range(self.vlayout.count()):
layout_item = self.vlayout.itemAt(i)
if layout_item.layout() == box:
deleteItemsOfLayout(layout_item.layout())
self.vlayout.removeItem(layout_item)
break
Run Code Online (Sandbox Code Playgroud)
您可以QLayouts通过获取它们的对应项QLayoutItem并将其删除来删除。您还应该存储对布局的引用,否则以后没有其他方法可以访问它们,除非您知道它们所属的小部件。
datainputHbox = QHBoxLayout()
self.vlayout = QVBoxLayout(self)
layout.addLayout(datainputHbox)
pagedatainputdeletboxbutton1.clicked.connect(lambda: self.boxdelete(datainputHbox))
def boxdelete(self, box):
for i in range(self.vlayout.count()):
layout_item = self.vlayout.itemAt(i)
if layout_item.layout() == box:
self.vlayout.removeItem(layout_item)
return
Run Code Online (Sandbox Code Playgroud)