PyQt5 Tutorial - BoxLayout

Jinku Hu 15 Februar 2024
  1. Vertikales Box-Layout - QVBoxLayout
  2. Horizontale Box - QHBoxLayout
  3. Horizontale Ausrichtung Mitte
PyQt5 Tutorial - BoxLayout

Wir werden das QBox-Layout wie ein horizontales Box-Layout, ein vertikales Box-Layout und die Stretch-Widgets vorstellen.

Vertikales Box-Layout - QVBoxLayout

import sys
from PyQt5 import QtWidgets


def basicWindow():
    app = QtWidgets.QApplication(sys.argv)
    windowExample = QtWidgets.QWidget()
    buttonA = QtWidgets.QPushButton("Click!")
    labelA = QtWidgets.QLabel("Label Example")

    v_box = QtWidgets.QVBoxLayout()
    v_box.addWidget(buttonA)
    v_box.addWidget(labelA)

    windowExample.setLayout(v_box)

    windowExample.setWindowTitle("PyQt5 Lesson 4")
    windowExample.show()

    sys.exit(app.exec_())


basicWindow()

Wo,

b = QtWidgets.QPushButton("Click!")
l = QtWidgets.QLabel("Label Example")

Die QPushButton und Label werden nicht wie in den letzten Kapiteln in das Fenster eingefügt. Diese beiden Widgets würden später zum Boxen-Layout hinzugefügt werden.

v_box = QtWidgets.QVBoxLayout()

Es erzeugt ein vertikales Box-Layout - QVBoxLayout, dass die Widgets, die diesem Layout hinzugefügt werden, vertikal ausgerichtet werden, wo das zuerst hinzugefügte Widget über den anderen Widgets liegt.

Es macht im Moment nichts, weil es nur ein Container ist, in dem wir unsere Widgets platzieren werden.

v_box.addWidget(buttonA)
v_box.addWidget(lableA)

Es fügt den Button und das Label zum vertikalen Box-Layout v_box hinzu.

Wenn wir diesen Code laufen lassen, bekommen wir den Druckknopf und das Etikett unter dem anderen.

PyQt5 VBox

Wenn Sie die Fenstergröße ändern, werden Sie sehen, dass diese beiden Widgets nicht mehr ausgerichtet sind.

PyQt5 VBox_Fenstergröße ändern

Wir werden unseren Code ändern, damit er besser aussieht.

Horizontale Box - QHBoxLayout

import sys
from PyQt5 import QtWidgets


def basicWindow():
    app = QtWidgets.QApplication(sys.argv)
    windowExample = QtWidgets.QWidget()
    buttonA = QtWidgets.QPushButton("Push Me")
    labelA = QtWidgets.QLabel("Look at me")

    h_box = QtWidgets.QHBoxLayout()
    h_box.addStretch()
    h_box.addWidget(labelA)
    h_box.addStretch()

    v_box = QtWidgets.QVBoxLayout()
    v_box.addWidget(buttonA)
    v_box.addLayout(h_box)

    windowExample.setLayout(v_box)

    windowExample.setWindowTitle("PyQt5 Lesson 4")
    windowExample.show()

    sys.exit(app.exec_())


basicWindow()

Wo,

h_box = QtWidgets.QHBoxLayout()

Es erzeugt ein horizontales Boxenlayout.

h_box.addStretch()
h_box.addWidget(labelA)
h_box.addStretch()

Das addStretch() Widget füllt horizontal so viel Platz wie möglich. Zwei Dehnungen vor und nach dem Etikett nehmen soviel Platz ein wie benötigt wird um das Etikett genau in der Mitte der horizontalen Box zu belassen.

PyQt5 VBox_HBox

Horizontale Ausrichtung Mitte

Eine weitere Möglichkeit, das Widget in der Mitte auszurichten, ist die Ausrichtung des Widgets auf AlignCenter zu setzen.

import sys
from PyQt5 import QtWidgets
from PyQt5 import QtCore


def basicWindow():
    app = QtWidgets.QApplication(sys.argv)
    windowExample = QtWidgets.QWidget()
    buttonA = QtWidgets.QPushButton("Click!")
    labelA = QtWidgets.QLabel("Label Example")
    labelA.setAlignment(QtCore.Qt.AlignCenter)

    v_box = QtWidgets.QVBoxLayout()
    v_box.addWidget(buttonA)
    v_box.addWidget(labelA)

    windowExample.setLayout(v_box)

    windowExample.setWindowTitle("AlignCenter Example")
    windowExample.show()

    sys.exit(app.exec_())


basicWindow()

Es werden nur zwei Zeilen im Vergleich zum ersten Beispiel oben hinzugefügt,

labelA.setAlignment(QtCore.Qt.AlignCenter)

Die setAlignment Methode legt die Ausrichtung des Widgets fest und QtCore.Qt.AlignCenter ist der Parameter für die Mittelausrichtung des QtCore Moduls, das in den Code importiert werden soll.

Es hat genau das gleiche Layout wie im obigen Beispiel.

PyQt5 Horizontales Ausrichten des Zentrums

Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook