我尝试添加多个表格化的QDockWidgets,但是以某种方式我只需要同时停靠。

MWE代码:

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


python - 添加多个停靠的小部件-LMLPHP

最佳答案

根据docs


  无效的QMainWindow :: tabifyDockWidget(QDockWidget *首先,QDockWidget *
  第二)
  
  将第二个停靠小部件移到第一个停靠小部件的顶部,创建一个
  主窗口中的选项卡式停靠区域。


根据第一个参数的结论,必须是初始的QDockWidget(如果有的话是child[0]),第二个必须是新的QDockWidget(在您的情况下是self)。该问题通过更改来解决:

parent.tabifyDockWidget(self, child[0])


至:

parent.tabifyDockWidget(child[0], self)


屏幕截图:

python - 添加多个停靠的小部件-LMLPHP

09-11 05:36