2017-10-19 6 views
0

Ich versuche, eine angedockte Schnittstelle in PyQt5 zu erstellen, ein BoxLayout zu erstellen, das meine verschiedenen Widgets zusammenfasst, und dieses Layout dann auf das QDockWidget anzuwenden.Anwenden eines Layouts auf ein QDockWidget in PyQt5

bisher Mein Ansatz war:

self.layout = QtWidgets.QBoxLayout(2) 
self.layout.addWidget(self.widget_one) 
self.layout.addWidget(self.widget_two) 
self.docked = QtWidgets.QDockWidget() 
self.docked.setLayout(self.layout) 
self.docked.show() 

ich zur Zeit erhalte eine Fehlermeldung wie folgt:

QWidget::setLayout: Attempting to set QLayout "" on QDockWidget "", 
which already has a layout 

jedoch in meinem Code oben Ich kann nicht sehen, wo ich hinzugefügt haben ein Layout vorher, und kann nichts in der Dokumentation finden, die mir hilft, dies zu beheben.

Wo bin ich in meinem Ansatz falsch gelaufen?

Antwort

1

QDockWidget bereits ein Standard-Layout haben, so dass dieser Fehler erzeugt, ist die richtige Sache ein leeres Widget hinzufügen und in diesem Widget Ort das gewünschte Layout:

self.layout = QtWidgets.QBoxLayout(2) 
self.layout.addWidget(self.widget_one) 
self.layout.addWidget(self.widget_two) 
self.docked = QtWidgets.QDockWidget() 
self.dockedWidget = QtWidgets.QWidget() 
self.docked.setWidget(self.dockedWidget) 
self.dockedWidget.setLayout(self.layout) 
self.docked.show() 

Beispiel:

class DockDemo(QMainWindow): 
    def __init__(self, parent=None): 
     super(DockDemo, self).__init__(parent) 
     self.setCentralWidget(QTextEdit()) 

     self.docked = QDockWidget("Dockable", self) 
     self.addDockWidget(Qt.LeftDockWidgetArea, self.docked) 
     self.dockedWidget = QWidget(self) 
     self.docked.setWidget(self.dockedWidget) 
     self.setWindowTitle("Dock demo") 
     self.dockedWidget.setLayout(QVBoxLayout()) 
     for i in range(5): 
      self.dockedWidget.layout().addWidget(QPushButton("{}".format(i))) 


if __name__ == '__main__': 
    import sys 
    app = QApplication(sys.argv) 
    ex = DockDemo() 
    ex.show() 
    sys.exit(app.exec_()) 

Screenshot:

enter image description here

Verwandte Themen