您可以简单地将布局重新设置为一个临时小部件:
def reLayout(self):
QWidget().setLayout(self.layout())
layout = QGridLayout(self)
...
这样会将所有子窗口小部件重新添加到该临时对象中,并且该对象及其新子对象将被立即删除,因为我们没有对其进行引用。
但是,为单个窗口小部件提供多种布局并能够在它们之间进行切换的典型方法是使用QStackedWidget
或QStackedLayout
。
并且,如果您仍然需要该次要问题的答案:
如何先删除旧版面?
看来您无法直接删除QObject
具有父项的,因为父项保留对该对象的引用。但是您可以将对象添加到一个临时对象QObjectCleanupHandler
中,与上述解决方案一样,该临时对象将立即随其包含的对象一起删除:
QObjectCleanupHandler().add(self.layout())