Widgets Tutorial - Using Layouts

Usually, child widgets are arranged inside a window using layout objects rather than by specifying positions and sizes explicitly. Here, we construct a label and line edit widget that we would like to arrange side-by-side.

from PySide6 import QtWidgets
if __name__ == "__main__":

    app = QApplication([])
    window = QWidget()
//! [create, lay out widgets and show]
    label = QLabel(QApplication.translate("windowlayout", "Name:"))
    lineEdit = QLineEdit()
    layout = QHBoxLayout()
    layout.addWidget(label)
    layout.addWidget(lineEdit)
    window.setLayout(layout)
//! [create, lay out widgets and show]
    window.setWindowTitle(
        QApplication.translate("windowlayout", "Window layout"))
    window.show()
    sys.exit(app.exec())

widgets-tutorial-windowlayout1

The layout object we construct manages the positions and sizes of widgets supplied to it with the addWidget() function. The layout itself is supplied to the window itself in the call to setLayout() . Layouts are only visible through the effects they have on the widgets (and other layouts) they are responsible for managing.

In the example above, the ownership of each widget is not immediately clear. Since we construct the widgets and the layout without parent objects, we would expect to see an empty window and two separate windows containing a label and a line edit. However, when we tell the layout to manage the label and line edit and set the layout on the window, both the widgets and the layout itself are ‘’reparented’’ to become children of the window.

Example project @ code.qt.io