[英]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.