Как очистить содержимое QFrame в PyQT5

Как можно очистить QFrame от всех виджетов?

Нашел в инете способ очистки:

setParent(None)

Но в моем случае так не сработает.
При нажатии на кнопку "Hello" в QFrame должна отображаться 1 кнопка.
Попробовал удалять содержимое QFrame каждый раз и добавлять также при помощи insertWidget, но не сработало

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QFrame, \
    QPushButton, QMainWindow


class Example(QMainWindow):
    def __init__(self):
        super().__init__()
        self.count_of_buttons = 1

        self.centralWidget = QWidget()
        self.setCentralWidget(self.centralWidget)

        self.setGeometry(700, 200, 500, 400)

        self.button_hello = QPushButton('Hello')
        self.button_hello.clicked.connect(self.add_button)

        self.layout_buttons = QVBoxLayout()
        self.layout_buttons.addStretch()  # Это добавит пружину, прижимающую виджеты вверх

        self.frame = QFrame()
        self.frame.setMinimumSize(200, 200)
        self.frame.setFrameStyle(QFrame.Box)
        self.frame.setLayout(self.layout_buttons)

        self.main_layout = QVBoxLayout(self.centralWidget) # + self.
        self.main_layout.addWidget(self.button_hello) # + self.
        # self.main_layout.addWidget(self.frame) # -

    def add_button(self):
        self.main_layout.addWidget(self.frame) # +
        self.button = QPushButton(f"Кнопка № {self.count_of_buttons}")

        self.button.clicked.connect(lambda ch, btn=self.button: self.pressed_btn(btn))

        self.count_of_buttons += 1
        self.layout_buttons.insertWidget(0,self.button)  # Добавление в начало, с пружиной это прижмет вверх

    def pressed_btn(self, btn):
        print(f"кнопка нажата: {btn.text()}")


if __name__ == '__main__':
    app = QApplication(sys.argv)
    form = Example()
    form.show()
    sys.exit(app.exec_())

Ответы (1 шт):

Автор решения: S. Nick

То что вы задумали выглядит примерно так:

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QFrame, \
    QPushButton, QMainWindow, QGridLayout


class Example(QMainWindow):
    def __init__(self):
        super().__init__()
        self.count_of_buttons = 1
        self.centralWidget = QWidget()
        self.setCentralWidget(self.centralWidget)
        self.setGeometry(700, 200, 500, 400)

        self.button_add = QPushButton('Add')
        self.button_add.clicked.connect(self.add_button)
        
        self.button_clear = QPushButton('Clear')                             # +++
        self.button_clear.clicked.connect(self.clear_button)                 # +++

        self.layout_buttons = QVBoxLayout()
        self.layout_buttons.addStretch()  

        self.frame = QFrame()
        self.frame.setMinimumSize(200, 200)
        self.frame.setFrameStyle(QFrame.Box)
        self.frame.setLayout(self.layout_buttons)

        self.main_layout = QGridLayout(self.centralWidget)                   # QGridLayout
        self.main_layout.addWidget(self.button_add, 0, 0)
        self.main_layout.addWidget(self.button_clear, 0, 1)                  # +++
        self.main_layout.addWidget(self.frame, 1, 0, 1, 2)                   # +++


    def add_button(self):
# -       self.main_layout.addWidget(self.frame) 
        self.button = QPushButton(f"Кнопка № {self.count_of_buttons}")
        self.button.clicked.connect(lambda ch, btn=self.button: self.pressed_btn(btn))
        self.count_of_buttons += 1
        self.layout_buttons.insertWidget(0, self.button)  

    def pressed_btn(self, btn):
        print(f"кнопка нажата: {btn.text()}")

# +++ vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv        
    def clear_button(self):
        widgets = self.frame.layout().count()
        if widgets > 1:
            for i in range(widgets-1):
                widget = self.frame.layout().itemAt(0).widget()
                self.frame.layout().removeWidget(widget)
                widget.hide()                         
# +++ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

if __name__ == '__main__':
    app = QApplication(sys.argv)
    form = Example()
    form.show()
    sys.exit(app.exec_())

введите сюда описание изображения

→ Ссылка