pyqt: как убрать виджет? - PullRequest
32 голосов
/ 05 мая 2011

У меня есть QGroupBox виджет с детьми, который я хочу удалить. Как я могу это сделать? Я не могу найти removeWidget, removeChild, removeItem или что-нибудь подобное в документах . Я могу видеть только то, как удалить вещи из макета, но это, по-видимому, не удаляет его из фактического виджета.

Ответы [ 3 ]

40 голосов
/ 10 мая 2011

Если у вашего виджета нет дочерних виджетов, которые зависят от него, я думаю, вы можете использовать:

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 имя переменной, потому что на нее нет ссылок за пределами вашей функции.

Попробуйте оба метода и посмотрите, что работает для вас (не теряйте память после повторения много раз).

26 голосов
/ 05 мая 2011

Ну, это работает: на виджете, который я хочу удалить, позвоните widget.setParent(None). Мне нравится, как добавление в макет добавляет виджет в контейнер, но удаление из макета не ... забавная штука.

6 голосов
/ 05 мая 2011

Вы действительно хотите удалить виджет? hide не подойдет? ИМХО принятый метод использует show / hide, чтобы виджеты появлялись и исчезали из поля зрения пользователя.

Альтернативой является использование QStackedWidget

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...