PyQt5 tutorial - BoxLayout

  1. Verticale vakindeling - QVBoxLayout
  2. Horizontale doos - QHBoxLayout
  3. Horizontaal uitlijningscentrum

We gaan de QBox lay-out introduceren als een horizontale box-layout, een verticale box-layout en de stretch-widgets.

Verticale vakindeling - 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()

Waar,

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

De QPushButton en QLabel worden niet aan het venster toegevoegd op dezelfde manier als in de vorige hoofdstukken. Deze twee widgets zouden later aan de box lay-out worden toegevoegd.

v_box = QtWidgets.QVBoxLayout()

Het creëert een lay-out met verticale vakken - QVBoxLayout dat de widgets die aan deze lay-out worden toegevoegd verticaal worden uitgelijnd, waarbij de eerst toegevoegde widget zich boven andere widgets bevindt.

Het doet momenteel niets, omdat het slechts een container is waar we onze widgets in gaan plaatsen.

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

Het voegt de knop en het label toe aan de lay-out van de verticale doos v_box.

Als we deze code uitvoeren, krijgen we de drukknop en het label onder elkaar.

PyQt5 VBox

Als u de Windows-grootte wijzigt, ziet u dat deze twee widgets niet meer zijn uitgelijnd.

PyQt5 VBox_Change Venstergrootte

We zullen onze code wijzigen om deze er beter uit te laten zien.

Horizontale doos - 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()

Waar,

h_box = QtWidgets.QHBoxLayout()

Hiermee maakt u een horizontale lay-out van het vak.

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

De addStretch() widget vult zoveel mogelijk ruimte horizontaal op. Twee stukken voor en na het label nemen zoveel ruimte in beslag als nodig is om het label precies in het midden van de horizontale doos te laten.

PyQt5 VBox_HBox

Horizontaal uitlijningscentrum

Een andere manier om de widget in het midden uit te lijnen is het instellen van de uitlijning van de widget als AlignCenter.

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

Het voegt slechts twee lijnen toe in vergelijking met het eerste voorbeeld hierboven,

labelA.setAlignment(QtCore.Qt.AlignCenter)

De setAlignment methode stelt de uitlijning van de widget in en QtCore.Qt.AlignCenter is de middelste uitlijningsparameters van de QtCore module die in de code moeten worden geïmporteerd.

Het heeft exact dezelfde lay-out als in het bovenstaande voorbeeld.

PyQt5 Horizontaal AlignCenter