Entfernen von widgets und layout sowie
War ich versucht, etwas zu finden, die ein qt-layout und löschen alles aus. Nur vorstellen, wie das Fenster aussieht - ich habe:
QVBoxLayout
| ------QHboxLayout
|---------QWidget
| ------QHboxLayout
|---------QWidget
.........
So, ich brauche etwas, das ich anrufen kann rekursiv zu LÖSCHEN UND LÖSCHEN Sie alle Sachen von meinen Eltern QVBoxLayout
. Ich habe versucht, die Dinge, die hier erwähnt ( Deaktivieren Sie alle widgets in einem layout in pyqt ), aber keiner von Ihnen arbeiten (keine richtige Antwort markiert jedenfalls). Mein code sieht wie folgt aus:
def clearLayout(self, layout):
for i in range(layout.count()):
if (type(layout.itemAt(i)) == QtGui.QHBoxLayout):
print "layout " + str(layout.itemAt(i))
self.clearLayout(layout.itemAt(i))
else:
print "widget" + str(layout.itemAt(i))
layout.itemAt(i).widget().close()
Aber es gibt einen Fehler:
layout.itemAt(i).widget().close()
AttributeError: 'NoneType' object has no attribute 'close'
=>BEARBEITEN
Diese ein bisschen arbeiten (aber nicht wenn es andere Layout
als HBoxLayout
:
def clearLayout(self, layout):
layouts = []
for i in range(layout.count()):
if (type(layout.itemAt(i)) == QtGui.QHBoxLayout):
print "layout " + str(layout.itemAt(i))
self.clearLayout(layout.itemAt(i))
layouts.append(layout.itemAt(i))
else:
print "widget" + str(layout.itemAt(i))
if (type(layout.itemAt(i)) == QtGui.QWidgetItem):
layout.itemAt(i).widget().close()
InformationsquelleAutor kosta5 | 2012-02-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den sichersten Weg zum löschen eines Layouts besteht darin, die Gegenstände mit seinen takeAt Methode, und dann löschen Sie ausdrücklich alle widgets mit deleteLater:
InformationsquelleAutor ekhumoro
Das problem mit deinem code ist
QLayout.itemAt()
gibt eineQLayoutItem
,QWidgetItem
oderQSpacerItem
je nach Element an dieser position. So ist die Bedingung:nie
True
und werden Sie versuchen zu tun.widget()
für eineQLayoutItem
und zurückNone
. Damit die Fehlermeldung, die Sie erhalten. Eine andere Sache ist, müssen Sie eine Schleife rückwärts. Weil das entfernen Dinge von Anfang an eine Verlagerung der Gegenstände und die Reihenfolge der Elemente ändern.Müssen Sie schreiben Sie Ihre Funktion so:
Ich sorta fest, wie diese: def clearLayout(selbst-layout): for i in range(layout.count()): if (type ("layout".itemAt(i)) == QtGui.QHBoxLayout): print "layout" + str(layout.itemAt(i)) selbst.clearLayout(layout.itemAt(i)) else: print "- widget" + str(layout.itemAt(i)) wenn (Typ(layout.itemAt(i)) == QtGui.QWidgetItem): - layout.itemAt(ich).widget().close()
Das ist komisch. Ich bekomme
QLayoutItem
s für meine Prüfungen. Anyways, ich bearbeitet den code. Versuchen Sie diese ein.InformationsquelleAutor Avaris