你如何在 PySide 中使用 layout.adoptLayout(layout)?

How do you use layout.adoptLayout(layout) in PySide?

我有

widget = QtWidgets.Widgets()
layout = QtWidgets.QVBoxLayout(parent=widget)

现在在某些情况下,我想将 QVBoxLayout 更改为 QHBoxLayout,如果可能的话,我想在创建后执行此操作。也就是说,无需从一开始就简单地创建 QHBoxLayout

我试过使用

layout.adoptLayout(QtWidgets.QHBoxLayout())

但这只是 returns True,并没有改变实际布局。

注意: adoptLayout/( 是不应公开的内部方法,所以我认为这是一个错误,因为它也没有记录。

要实现方向的改变,你可以使用 QBoxLayout class:

from PySide2 import QtCore, QtWidgets


if __name__ == "__main__":
    app = QtWidgets.QApplication()

    widget = QtWidgets.QWidget()

    lay = QtWidgets.QBoxLayout(QtWidgets.QBoxLayout.TopToBottom, widget)

    for i in range(4):
        button = QtWidgets.QPushButton(f"button {i}")
        lay.addWidget(button)

    widget.show()

    def on_timeout():
        direction = (
            QtWidgets.QBoxLayout.TopToBottom
            if lay.direction() == QtWidgets.QBoxLayout.LeftToRight
            else QtWidgets.QBoxLayout.LeftToRight
        )
        lay.setDirection(direction)

    timer = QtCore.QTimer(interval=1000, timeout=on_timeout)
    timer.start()

    app.exec_()