TUTORIAL
Tutoriel PyQt5 - BoxLayout
Ce tutoriel présente la disposition des boîtes PyQt5 comme la disposition des boîtes horizontales et verticales.
Nous allons introduire la disposition des QBox comme une disposition de boîte horizontale, une disposition de boîte verticale et les widgets d’étirement.
Disposition des boîtes verticales - 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()
Où,
b = QtWidgets.QPushButton("Click!")
l = QtWidgets.QLabel("Label Example")
Le QPushButton et le QLabel ne sont pas ajoutés à la fenêtre comme nous l’avons fait dans les derniers chapitres. Ces deux widgets seront ajoutés à la disposition de la boîte plus tard.
v_box = QtWidgets.QVBoxLayout()
Cela crée une disposition verticale de la boîte - QVBoxLayout que les widgets ajoutés à cette disposition seront alignés verticalement où le premier widget ajouté est au-dessus des autres widgets.
Il ne fait rien pour le moment car c’est juste un conteneur où nous allons mettre nos widgets.
v_box.addWidget(buttonA)
v_box.addWidget(lableA)
Il ajoute le bouton et le label au layout vertical de la v_box.
Si nous lançons ce code, nous aurons le bouton et le label l’un en dessous de l’autre.
Si vous changez la taille des fenêtres, vous verrez que ces deux widgets ne sont plus alignés.
Nous allons changer notre code pour qu’il ait meilleure allure.
Boîte horizontale - 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()
Où,
h_box = QtWidgets.QHBoxLayout()
Il crée une mise en page de boîte horizontale.
h_box.addStretch()
h_box.addWidget(labelA)
h_box.addStretch()
Le widget addStretch() remplit autant d’espace horizontalement qu’il le peut. Deux étirements avant et après l’étiquette prennent autant d’espace que nécessaire pour laisser l’étiquette au milieu de la boîte horizontale.
Centre d’alignement horizontal
Une autre façon d’aligner le widget au centre est de définir l’alignement du widget comme étant 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()
Cela n’ajoute que deux lignes par rapport au premier exemple ci-dessus,
labelA.setAlignment(QtCore.Qt.AlignCenter)
La méthode setAlignment définit l’alignement du widget et QtCore.Qt.AlignCenter est le paramètre d’alignement du centre du module QtCore qui doit être importé dans le code.
Il a exactement la même disposition avec l’exemple ci-dessus.