QLayout: Versuch zum hinzufügen von QLayout "" QWidget "", die bereits über ein layout
Möchte ich einige Registerkarten, und ich lese diese Antwort: So fügen Sie eine Registerkarte in PySide
Ich den code in die Antwort und einige änderungen vorgenommen. Da mein code zu Lesen, die Dateien und bekommen den Namen von meinen tabs von denen-Datei, so dass ich fügen Sie eine for-Schleife in meinem code. Und hier ist mein code.
from PySide import QtCore, QtGui
import sys
import dflash_controller as con
if __name__ == "__main__":
list = [['a', 3], ['b', 4], ['c', 5], ['d', 6]]
app = QtGui.QApplication(sys.argv)
wid = QtGui.QWidget()
grid = QtGui.QGridLayout(wid)
wid.setLayout(grid)
# setting the inner widget and layout
grid_inner = QtGui.QGridLayout(wid)
wid_inner = QtGui.QWidget(wid)
wid_inner.setLayout(grid_inner)
# add the inner widget to the outer layout
grid.addWidget(wid_inner)
# add tab frame to widget
wid_inner.tab = QtGui.QTabWidget(wid_inner)
grid_inner.addWidget(wid_inner.tab)
# create tab
for i, index in enumerate(list[0:]):
new_tab = QtGui.QWidget(wid_inner.tab)
grid_tab = QtGui.QGridLayout(new_tab)
grid_tab.setSpacing(10)
wid_inner.tab.addTab(new_tab, index[0])
new_tab.setLayout(grid_tab)
wid.show()
app.exec_()
Es zeigt wirklich meine tabs. Jedoch, ich traf eine Warnung: QLayout: Versuch zum hinzufügen von QLayout "" QWidget "", die bereits über ein layout
Seit dieser Registerkarte code nur ein Teil des gesamten code, das problem wird blockieren, die die Daten fließen. Und ich habe keine Ahnung, was falsch mit es. Ich suchte nach Antworten, aber andere Antworten sind nicht in python geschrieben.
Wenn jemand kann mir helfen, vielen Dank im Voraus.
InformationsquelleAutor der Frage EricBkc | 2014-08-22
Du musst angemeldet sein, um einen Kommentar abzugeben.
Beim ordnen Sie ein widget als Vater eines
QLayout
Sie durch übergabe in den Konstruktor, das layout wird automatisch das layout für das widget. In Ihrem code, den Sie sind nicht nur dabei, sondern explizit aufrufensetlayout()
. Dies ist kein problem, wenn, wenn das widget übergeben ist das gleiche. Wenn Sie unterschiedlich sind, erhalten Sie eine Fehlermeldung, weil Qt versucht, weisen Sie das zweite layout für Ihr widget hat schon ein layout festgelegt.Dein problem liegt in diesen Zeilen:
Hier sind Sie
wid
als übergeordnetes Element fürgrid_inner
. Qt setzen willgrid_inner
als das layout fürwid
aberwid
hat bereits ein layout wie oben. Die änderung der oben genannten zwei Zeilen, dies wird dein problem lösen. Sie können entfernen Sie Aufrufe vonsetLayout()
wie sind Sie überflüssig.Verwenden Sie eine Methode oder die andere für die Einstellung der layout-um Verwirrung zu vermeiden.
Zuordnung von widget-parent:
Explizit festlegen des Layouts:
InformationsquelleAutor der Antwort user3419537