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

  1. PyQt5 グリッドレイアウト
  2. PyQt5 グリッドレイアウトスパン
  3. PyQt5 グリッドレイアウトストレッチ

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

PyQt5 グリッドレイアウト

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

Grid Layout.py
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 の場合、セルウィジェットは右端または下端に拡張されます。

Grid Layout Stretch.py
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 は列または行の伸長因子を設定します。ストレッチ係数は、他の列/行と比較した相対的な数値です。より高い係数の列/行は、使用可能なスペースをより多く使用します。

Grid Layout Stretch.py
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 グリッドレイアウトストレッチ

comments powered by Disqus