У меня есть виджет QGroupBox
с дочерними элементами, которые я хочу удалить. Как мне это сделать? Я не могу найти removeWidget
, removeChild
, removeItem
или что-либо подобное в документах. Я могу только видеть, как удалить вещи из макета, но это, по-видимому, не удаляет его из фактического виджета.
Pyqt: как удалить виджет?
Ответ 1
Ну, это работает: на виджет, который я хочу удалить, вызовите widget.setParent(None)
. Мне нравится, как добавление в макет добавляет виджет в контейнер, но удаление из макета не... забавный материал.
Ответ 2
Если ваш виджет не имеет дочерних виджетов, которые зависят от него, я думаю, вы можете использовать:
layout.removeWidget(self.widget_name)
self.widget_name.deleteLater()
self.widget_name = None
в моих тестах, когда это виджет, у которого есть дочерние элементы:
import sip
layout.removeWidget(self.widget_name)
sip.delete(self.widget_name)
self.widget_name = None
если у вас нет имени переменной для виджета на классе или на глобальном уровне, вы все еще можете удалить из макета с помощью layout.takeAt(index) и получить указатель виджета из QLayoutItem, который возвращает эти функции с помощью QLayoutItem.widget() метод, в этом случае вам не нужно назначать None имя переменной, потому что оно не ссылается вне вашей функции.
Попробуйте оба метода и посмотрите, что сработает для вас (не пропустите память после повторения хорошей кучи раз).
Ответ 3
Вы действительно хотите удалить виджет? Не будет hide
делать? IMHO принятый метод использует show
/hide
, чтобы виджеты отображались и исчезали из пользовательского вида.
Альтернативой является использование QStackedWidget