添加多个停靠的小部件

时间:2017-08-18 22:12:43

标签: python python-3.x pyqt qt5 pyqt5

我尝试添加多个表格化的QDockWidgets但不知何故我只能同时停靠。

mwe code:

from PyQt5.QtWidgets import *
from PyQt5.QtCore import *

class DockWindow(QDockWidget):
    def __init__(self, parent, name):
        super().__init__(parent)

        parent.addDockWidget(Qt.TopDockWidgetArea, self)
        self.setWindowTitle(name)
        child = parent.findChildren(DockWindow)

        if len(child) > 1:
            parent.tabifyDockWidget(self, child[0])
            self.raise_()


app = QApplication(sys.argv)
main = QMainWindow()

for i in range(10):
    DockWindow(main, str(i))


main.show()
sys.exit(qApp.exec_())

enter image description here

1 个答案:

答案 0 :(得分:1)

根据docs

  

void QMainWindow :: tabifyDockWidget(QDockWidget * first,QDockWidget *   第二)

     

将第二个停靠窗口小部件移动到第一个停靠窗口小部件的顶部,创建一个   主窗口中的标签式停靠区域。

根据您的案例QDockWidget,第一个参数中的结论必须是初始child[0],如果有QDockWidget,则新self。通过改变来解决问题:

parent.tabifyDockWidget(self, child[0])

为:

parent.tabifyDockWidget(child[0], self)

截图:

enter image description here