Tutoriel PyQt5 - Disposition de la grille

Jinku Hu 30 janvier 2023
  1. Disposition de la grille PyQt5
  2. PyQt5 Portée de la grille
  3. PyQt5 Étirement de la grille
Tutoriel PyQt5 - Disposition de la grille

Nous allons apprendre une autre méthode de mise en page dans PyQt5 dans ce tutoriel - la mise en page de la grille.

Disposition de la grille PyQt5

La classe QGridLayout dispose les widgets dans une grille. La classe QGridLayout prend l’espace disponible et le divise en lignes et colonnes, puis place chaque widget dans la bonne cellule.

import sys
from PyQt5.QtWidgets import QWidget, QGridLayout, QPushButton, QApplication


class basicWindow(QWidget):
    def __init__(self):
        super().__init__()
        grid_layout = QGridLayout()
        self.setLayout(grid_layout)

        for x in range(3):
            for y in range(3):
                button = QPushButton(str(str(3 * x + y)))
                grid_layout.addWidget(button, x, y)

        self.setWindowTitle("Basic Grid Layout")


if __name__ == "__main__":
    app = QApplication(sys.argv)
    windowExample = basicWindow()
    windowExample.show()
    sys.exit(app.exec_())

Où,

grid_layout = QGridLayout()

QGridLayout de QWidgets spécifie le format de mise en page de la grille.

self.setLayout(grid_layout)

Il définit le format de la classe comme étant juste la méthode de mise en page définie - grid layout.

grid_layout.addWidget(button, x, y)

La méthode addWidget de la classe QGridLayout place le widget bouton dans la cellule gird à x, y. La position en haut à gauche est par défaut (0, 0).

Disposition de la grille PyQt5

PyQt5 Portée de la grille

Normalement, chaque widget consomme une cellule de la grille, mais il est aussi possible pour le widget d’occuper plus de cellules en utilisant des lignes et des colonnes couvrant les nombres de la méthode surchargée addWidget().

addWidget(self, QWidget, row, column, rowSpan, columnSpan, Qt.Alignment alignment=0)

Les troisième et quatrième paramètres sont l’espacement des lignes et des colonnes, égal à un par défaut. Si l’espacement est de -1, le widget de cellule s’étendra vers le bord droit ou le bord inférieur.

import sys
from PyQt5.QtWidgets import QWidget, QGridLayout, QPushButton, QApplication


class basicWindow(QWidget):
    def __init__(self):
        super().__init__()
        grid_layout = QGridLayout()
        self.setLayout(grid_layout)

        button = QPushButton("1-3")
        grid_layout.addWidget(button, 0, 0, 1, 3)

        button = QPushButton("4, 7")
        grid_layout.addWidget(button, 1, 0, -1, 1)

        for x in range(1, 3):
            for y in range(1, 3):
                button = QPushButton(str(str(3 * x + y)))
                grid_layout.addWidget(button, x, y)

        self.setWindowTitle("Basic Grid Layout")


if __name__ == "__main__":
    app = QApplication(sys.argv)
    windowExample = basicWindow()
    windowExample.show()
    sys.exit(app.exec_())

Portée de la grille PyQt5

PyQt5 Étirement de la grille

setColumnStretch et setRowStretch définissent le facteur d’étirement de la colonne ou de la ligne. Le facteur d’étirement est un nombre relatif par rapport aux autres colonnes ou lignes. Les colonnes/rangées avec un facteur plus élevé prennent plus d’espace disponible.

import sys
from PyQt5.QtWidgets import QWidget, QGridLayout, QPushButton, QApplication


class basicWindow(QWidget):
    def __init__(self):
        super().__init__()
        grid_layout = QGridLayout()
        self.setLayout(grid_layout)

        for x in range(3):
            for y in range(3):
                button = QPushButton(str(str(3 * x + y)))

                grid_layout.addWidget(button, x, y)

            grid_layout.setColumnStretch(x, x + 1)

        self.setWindowTitle("Basic Grid Layout")


if __name__ == "__main__":
    app = QApplication(sys.argv)
    windowExample = basicWindow()
    windowExample.show()
    sys.exit(app.exec_())
grid_layout.setColumnStretch(x, x + 1)

Il définit le facteur d’étirement des trois lignes comme étant respectivement de 1, 2 et 3, donc l’ordre de la largeur de la colonne est Troisième Colonne > Deuxième Colonne > Première Colonne.

PyQt5 Disposition de la Grille Étirement

Auteur: 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