Jaki jest "poprawny" lub idiomatyczny sposób czyszczenia/usuwania widgetów podczas korzystania z PyQt4?Właściwy sposób czyszczenia widgetów w pyqt
Rozważmy następujący kod:
choices = ['a', 'b', 'c']
checkboxes = []
layout = QtGui.QVBoxLayout()
dialog = MyDialog()
for c in choices:
checkboxes.append(QtGui.QCheckBox(c)
layout.addWidget(chkbox)
dialog.setLayout(layout)
for c in checkboxes:
c.setParent(None)
c.deleteLater()
c = None
Powyższy kod wykorzystuje setParent()
, deleteLater()
i ustawienie przedmiotu do None
. Czy wszystkie te są niezbędne?
Innym możliwym scenariuszem jest to, że mam okno dialogowe z wieloma widżetami i chcę usunąć te widżety i dodać nowe. Nie chcę "przeciekać" starych widżetów, ale nie jestem pewien, jaki byłby właściwy sposób na zrobienie czegoś takiego.
Wydaje mi się, że deleteLater()
może nigdy nie być potrzebne. Czy po prostu zmniejsza licznik referencji? Jeśli tak, czy ustawienie zmiennej na None nie byłoby tym samym?
Czy konieczne jest użycie argumentu "rodzic" podczas tworzenia wszystkich obiektów, które zostaną dodane do układu? Zdaję sobie sprawę, że jest to prawdopodobnie trochę bardziej wyraźne, ale czy jest to wymagane? –
Naprawdę nie. Jeśli dodasz je bezpośrednio do układu, układ sprawi, że będą one dziećmi właściciela układu. – jdi
Bardzo późno na imprezę, ale pomyślałem, że mogę to dodać - chociaż nie jest konieczne używanie argumentu "rodzic" - to chyba dobry pomysł, ponieważ ogranicza on trochę strukturę twojego kodu i ułatwia innym aby zobaczyć, jaka jest zamierzona hierarchia powstrzymywania. – Emmet