Обновление динамического QGridLayout — Python PyQt

Недавно я начал изучать Python, и сейчас я создаю программное обеспечение с графическим интерфейсом, используя библиотеки PyQt.

Вот моя проблема: я создаю область прокрутки, я помещаю в эту область прокрутки виджет, который содержит QGridLayout.

    sa = QtGui.QScrollArea()
    sa_widget = QtGui.QWidget()
    self.sa_grid.setSizeConstraint(QtGui.QLayout.SetMinAndMaxSize)
    sa_widget.setLayout(self.sa_grid)
    sa.setWidgetResizable(True)
    sa.setWidget(sa_widget)

Затем я добавляю 10 QLabel (конечно, это просто пример, в этом примере я использую QGridLayout так же, как вертикальный макет):

    i = 0
    while i<100:
        i = i +1
        add = QtGui.QLabel("Row %i" % i)
        self.sa_grid.addWidget(add)

Затем я создаю кнопку, которая вызывает функцию «имя_функции», я хочу, чтобы эта функция удаляла строку, пока это то, что я написал:

    tmp = QtGui.QWidget()
    tmp = self.sa_grid.itemAt(0)
    self.sa_grid.removeItem(tmp)

Он удаляет первую строку, и каждая строка x gridlayout становится строкой x-1, однако текст «Строка 1» не удаляется, поэтому я вижу «Строка 0» и «Строка 1» в одной строке.

Кто-нибудь может мне помочь?

Заранее большое спасибо, Давиде


person xuT    schedule 16.11.2012    source источник


Ответы (1)


Удаление элемента из макета не удаляет его. Элемент просто станет свободно плавающим объектом без связанного с ним макета.

Если вы хотите полностью избавиться от объекта, явно удалите его:

def deleteGridWidget(self, index):
    item = self.sa_grid.itemAt(index)
    if item is not None:
        widget = item.widget()
        if widget is not None:
            self.sa_grid.removeWidget(widget)
            widget.deleteLater()
person ekhumoro    schedule 16.11.2012
comment
Работает отлично, большое спасибо! Я потратил столько времени в поисках ответа, и теперь я его получил. Не могли бы вы предложить мне какой-нибудь отличный учебник по Python/PyQt, пожалуйста? Спасибо большое за вашу помощь! - person xuT; 17.11.2012
comment
@TheTux94. PyQt Wiki — неплохое место для начала. Не весь материал актуален (некоторые из них относятся к PyQt3, а не к PyQt4), но если вы покопаетесь, вы найдете много полезного. - person ekhumoro; 17.11.2012