C'est la première fois que je réponds à une question de stack overflow mais j'ai vu que toutes les réponses sont légèrement fausses. (oui, je sais que la question était de supprimer tous les widgets) Le problème avec la plupart d'entre elles est qu'elles ne prennent pas en compte les mises en page imbriquées, donc j'ai créé une fonction récursive, qui, étant donné une mise en page, supprimera récursivement tout ce qui se trouve à l'intérieur, et toutes les mises en page à l'intérieur :
def clearLayout(layout):
print("-- -- input layout: "+str(layout))
for i in reversed(range(layout.count())):
layoutItem = layout.itemAt(i)
if layoutItem.widget() is not None:
widgetToRemove = layoutItem.widget()
print("found widget: " + str(widgetToRemove))
widgetToRemove.setParent(None)
layout.removeWidget(widgetToRemove)
elif layoutItem.spacerItem() is not None:
print("found spacer: " + str(layoutItem.spacerItem()))
else:
layoutToRemove = layout.itemAt(i)
print("-- found Layout: "+str(layoutToRemove))
clearLayout(layoutToRemove)
Je n'ai peut-être pas pris en compte tous les types d'interface utilisateur, je ne suis pas sûr. J'espère que cela vous aidera !