PyQt5 チュートリアル - グリッドレイアウト Grid Layout

Jinku Hu 2023年1月3日 2019年12月31日
  1. PyQt5 グリッドレイアウト
  2. PyQt5 グリッドレイアウトスパン
  3. PyQt5 グリッドレイアウトストレッチ
PyQt5 チュートリアル - グリッドレイアウト Grid Layout

このチュートリアルでは、PyQt5 の別のレイアウト方法であるグリッドレイアウトを学習します。

PyQt5 グリッドレイアウト

この QGridLayout クラスは、ウィジェットをグリッドに配置します。QGridLayout 使用可能なスペースを取得し、行と列に分割してから、各ウィジェットを正しいセルに配置します。

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

コードでは、

grid_layout = QGridLayout()

QWidgetsQGridLayout は、レイアウト形式をグリッドレイアウトに指定します。

self.setLayout(grid_layout)

レイアウトを、定義したばかりのレイアウトメソッド(グリッドレイアウト)に設定します。

grid_layout.addWidget(button, x, y)

QGridLayout クラスの addWidget メソッドは、ウィジェット buttonx , y のセルに配置します。左上隅の座標のデフォルトは (0,0) です。

PyQt5 グリッドレイアウト

PyQt5 グリッドレイアウトスパン

通常、各ウィジェットはグリッドの 1つのセルを占有しますが、ウィジェットは addWidget() オーバーロードメソッドを使用して、行と列をより多くのセルにまたがることもできます。

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

3 番目と 4 番目のパラメーターは行と列にまたがっており、デフォルトでは 1 です。スパニングが -1 の場合、セルウィジェットは右端または下端に拡張されます。

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 グリッドレイアウトスパン

PyQt5 グリッドレイアウトストレッチ

setColumnStretchsetRowStretch は列または行の伸長因子を設定します。ストレッチ係数は、他の列/行と比較した相対的な数値です。より高い係数の列/行は、使用可能なスペースをより多く使用します。

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)

3 行のストレッチ係数を 1, 2, 3 それぞれに設定します。したがって、列幅の順序は Third Column > Second Column > First Column です。

PyQt5 グリッドレイアウトストレッチ

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