簡體   English   中英

將布局應用於PyQt5中的QDockWidget

[英]Applying a layout to a QDockWidget in PyQt5

我正在嘗試在PyQt5中創建一個停靠接口,創建一個包含各種小部件的BoxLayout,然后將此布局應用於QDockWidget。

到目前為止,我的方法是:

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()

我目前收到的錯誤如下:

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

但是,在我上面的代碼中,我無法看到我之前添加了布局的位置,並且無法在文檔中找到任何內容來幫助我解決此問題。

我的方法在哪里出錯了?

QDockWidget已經有一個默認布局,因此生成此錯誤,正確的是添加一個空小部件,並在該小部件中放置您想要的布局:

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()

例:

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_())

截圖:

在此輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM