PyQt5 tutorial - grid layout

  1. PyQt5 Rasterindeling
  2. PyQt5 Rasterindeling Span
  3. PyQt5 grid layout stretch

In deze tutorial leren we een andere layout methode in PyQt5 - grid layout.

Yakuza Kiwami 2 Find the Hidden Room
Yakuza Kiwami 2 Find the Hidden Room

PyQt5 Rasterindeling

De QGridLayout klas legt widgets in een raster op. QGridLayout neemt de beschikbare ruimte en verdeelt het in rijen en kolommen en plaatst vervolgens elke widget in de juiste cel.

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

Waar,

grid_layout = QGridLayout()

QGridLayout van QWidgets geeft aan dat de lay-out indeling grid layout moet zijn.

self.setLayout(grid_layout)

Het stelt de klassen lay-out zo in dat deze gewoon de gedefinieerde layout methode is - grid layout.

grid_layout.addWidget(button, x, y)

addWidget methode van QGridLayout klasse zet de widget button naar de celgordel op x , y . De positie linksboven is standaard (0, 0).

PyQt5 rasterindeling

PyQt5 Rasterindeling Span

Normaal verbruikt elke widget één cel van het raster, maar het is ook mogelijk dat de widget meer cellen bezet met behulp van rijen en kolommen die de addWidget() overbelaste methode overspannen.

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

De derde en vierde parameters zijn rij- en kolomoverspanning, standaard gelijk aan één. Als de spanning -1 is, wordt de celwidget naar de rechter- of onderkant uitgebreid.

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

PyQt5-rasterindelingsbereik

PyQt5 grid layout stretch

setColumnStretch en setRowStretch stelt de rekfactor van de kolom of rij in. De rekfactor is een relatief aantal in vergelijking met andere kolommen / rijen. Kolommen / rijen met een hogere factor nemen meer van de beschikbare ruimte in beslag.

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)

Het stelt de rekfactor van de drie rijen 1, 2, 3 respectievelijk in, daarom is de volgorde van kolombreedte Third Column > Second Column > First Column.

Reklay-out van PyQt5