PyQt5 Tutorials

PyQt5 QGridLayout完全マスター:包括的なチュートリアル

Spread the love

このチュートリアルは、柔軟で整理されたユーザーインターフェースを作成するためのPyQt5の強力なQGridLayoutの使い方を包括的に解説します。基本事項、セルの結合やウィジェットの伸縮制御といった高度なテクニック、そして理解を深めるための実践的な例を取り上げます。

目次

  1. QGridLayoutの基本的な使い方
  2. 複数のセルにまたがるウィジェット
  3. ウィジェットの伸縮制御
  4. 高度なテクニックと考慮事項

1. QGridLayoutの基本的な使い方

QGridLayoutは、ウィジェットをグリッド状の行と列に配置します。各ウィジェットはデフォルトで1つのセルを占有します。簡単な例から始めましょう。


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

app = QApplication(sys.argv)
window = QWidget()
window.setWindowTitle("PyQt5 Grid Layout Example")

layout = QGridLayout()

button1 = QPushButton("Button 1")
button2 = QPushButton("Button 2")
button3 = QPushButton("Button 3")
button4 = QPushButton("Button 4")

layout.addWidget(button1, 0, 0)  # 0行0列
layout.addWidget(button2, 0, 1)  # 0行1列
layout.addWidget(button3, 1, 0)  # 1行0列
layout.addWidget(button4, 1, 1)  # 1行1列

window.setLayout(layout)
window.show()
sys.exit(app.exec_())

これは、2×2のボタングリッドを作成します。addWidget(widget, row, column)は、指定された行と列(0から始まるインデックス)にウィジェットを追加します。

2. 複数のセルにまたがるウィジェット

ウィジェットを複数の行または列にまたがらせるには、addWidget(widget, row, column, rowspan, colspan)を使用します。rowspancolspanは、ウィジェットが占有する行数と列数を定義します。


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

app = QApplication(sys.argv)
window = QWidget()
window.setWindowTitle("PyQt5 Grid Layout Span Example")

layout = QGridLayout()

label = QLabel("This label spans two columns")
button1 = QPushButton("Button 1")
button2 = QPushButton("Button 2")

layout.addWidget(label, 0, 0, 1, 2)  # 2列にまたがる
layout.addWidget(button1, 1, 0)
layout.addWidget(button2, 1, 1)

window.setLayout(layout)
window.show()
sys.exit(app.exec_())

ここでは、ラベルが2列にまたがっています。

3. ウィジェットの伸縮制御

デフォルトでは、ウィジェットは最小サイズに設定されます。ウィジェットが利用可能なスペースをどのように拡張して埋めるかを制御するには、setColumnStretch(column, stretch)setRowStretch(row, stretch)を使用します。伸縮係数が大きいほど、ウィジェットは利用可能なスペースの比例的に大きな部分を占めます。


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

app = QApplication(sys.argv)
window = QWidget()
window.setWindowTitle("PyQt5 Grid Layout Stretch Example")

layout = QGridLayout()

button1 = QPushButton("Button 1")
button2 = QPushButton("Button 2")

layout.addWidget(button1, 0, 0)
layout.addWidget(button2, 0, 1)

layout.setColumnStretch(1, 2)  # 1列目は0列目の2倍伸縮する

window.setLayout(layout)
window.show()
sys.exit(app.exec_())

button2は、button1の水平方向のスペースの2倍になります。

4. 高度なテクニックと考慮事項

より複雑なレイアウトの場合は、以下を検討してください。

  • addLayout(): ネストされた構造のために、他のレイアウトをQGridLayout内に埋め込みます。
  • 配置: setAlignment()を使用して、セル内のウィジェットの配置を制御します。
  • 間隔: setVerticalSpacing()setHorizontalSpacing()を使用して、行と列の間隔を調整します。
  • マージン: setContentsMargins()を使用して、グリッド全体の周囲のマージンを制御します。

これらのテクニックを習得することで、洗練され、高度に適応可能なPyQt5インターフェースを作成できます。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です