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()
QWidgets
の QGridLayout
は、レイアウト形式をグリッドレイアウトに指定します。
self.setLayout(grid_layout)
レイアウトを、定義したばかりのレイアウトメソッド(グリッドレイアウト)に設定します。
grid_layout.addWidget(button, x, y)
QGridLayout
クラスの addWidget
メソッドは、ウィジェット button
を x , y
のセルに配置します。左上隅の座標のデフォルトは (0,0)
です。
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 グリッドレイアウトストレッチ
setColumnStretch
と setRowStretch
は列または行の伸長因子を設定します。ストレッチ係数は、他の列/行と比較した相対的な数値です。より高い係数の列/行は、使用可能なスペースをより多く使用します。
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
です。
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