Ваша функция удаляет все виджеты, потому что вы циклически перебираете все виджетов, от первого до последнего.
Кроме того, в действительности нет необходимости go по всему макету, поскольку у вас уже есть список виджетов, который всегда добавляет последний в конце.
Просто вытащите последний элемент из списка. Удаление его из макета не должно быть необходимым, поскольку deleteLater()
позаботится об этом, но это только для демонстрационных целей.
def deleate_widgets(self):
# remove the last item from the list
lastWidget = self.mylist.pop(-1)
self.main_layout.removeWidget(lastWidget)
lastWidget.deleteLater()
Ради полноты, ваша функция должна была сделать следующее :
- цикл виджетов по макету в обратном направлении ;
- прерывание цикл, как только первый (как в последний ) элемент найден;
def deleate_widgets(self):
widgets = [self.main_layout.itemAt(i).widget() for i in range(self.main_layout.count())]
# use reversed() to cycle the list backwards
for widget in <b>reversed(widgets)</b>:
if isinstance(widget, qtw.QLineEdit):
print("linedit: %s - %s" %(widget.objectName(), widget.text()))
widget.deleteLater()
# the line edit has been found, exit the cycle with break to avoid
# deleting further widgets
<b>break</b>
Кроме того, на самом деле нет смысла создавать атрибуты экземпляра (self.someobject = ...
) для объектов, которые не нуждаются в постоянной ссылке, особенно если вы создавайте эти объекты повторно (что приведет к постоянной перезаписи этого атрибута, делая его бесполезным) и вы уже храните их в постоянном объекте модели данных (обычно это список, кортеж, словарь) как self.mylist
в вашем случае (и , что должен быть атрибутом экземпляра):
def add_widget(self):
# no need to create a "self.my_lineedit"
<b>my_lineedit</b> = qtw.QLineEdit()
self.mylist.append(my_lineedit)
self.main_layout.addWidget(my_lineedit)
После просмотра ваших предыдущих вопросов и комментариев я настоятельно рекомендую вам лучше изучить и поэкспериментируйте с Python моделями данных , управляющими потоками и классами , так как они являются базовыми c концепциями (Python и программированием в целом) что необходимо понять и усвоить, прежде чем пытаться сделать что-нибудь еще.