PyQt5は、ウィジェットを効果的に配置するための強力なレイアウトマネージャーを提供します。特にQVBoxLayout
(垂直)とQHBoxLayout
(水平)は、構造化されたユーザーインターフェースを作成するための基本です。このチュートリアルでは、これらのレイアウトを調査し、使用方法とウィジェットの配置方法を制御する方法を示します。
目次:
垂直ボックスレイアウト (QVBoxLayout)
QVBoxLayout
はウィジェットを垂直に配置し、上から下に積み重ねます。これは、フォーム、リスト、または列状の配置を必要とするあらゆるシナリオに最適です。
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QLabel, QPushButton
app = QApplication(sys.argv)
window = QWidget()
window.setWindowTitle("垂直ボックスレイアウト例")
layout = QVBoxLayout()
layout.addWidget(QLabel("これはラベルです。"))
layout.addWidget(QPushButton("クリック!"))
layout.addWidget(QLabel("もう一つのラベルです。"))
window.setLayout(layout)
window.show()
sys.exit(app.exec_())
このコードは、ラベル、ボタン、別のラベルを含む垂直レイアウトを持つウィンドウを作成します。
水平ボックスレイアウト (QHBoxLayout)
QHBoxLayout
はウィジェットを横に配置し、横に並べます。ツールバー、関連するコントロールのグループ化、またはウィジェットを1列に配置するために使用します。
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QHBoxLayout, QLabel, QPushButton
app = QApplication(sys.argv)
window = QWidget()
window.setWindowTitle("水平ボックスレイアウト例")
layout = QHBoxLayout()
layout.addWidget(QLabel("ラベル1"))
layout.addWidget(QPushButton("ボタン1"))
layout.addWidget(QLabel("ラベル2"))
window.setLayout(layout)
window.show()
sys.exit(app.exec_())
この例は前の例に似ていますが、水平配置のためにQHBoxLayout
を使用しています。
ウィジェット配置の制御
ボックスレイアウト内のウィジェットは、デフォルトで左上に配置されます。配置を制御するには、Qt.AlignHCenter
(水平方向の中央)、Qt.AlignVCenter
(垂直方向の中央)、またはそれらの組み合わせなどのフラグを使用してsetAlignment()
メソッドを使用します。これにより、ウィジェットがレイアウト内で割り当てられたスペースの中央に配置されます。
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QHBoxLayout, QLabel, QPushButton, Qt
app = QApplication(sys.argv)
window = QWidget()
window.setWindowTitle("ウィジェット配置例")
layout = QHBoxLayout()
label = QLabel("中央揃えラベル")
layout.addWidget(label)
layout.setAlignment(label, Qt.AlignHCenter | Qt.AlignVCenter)
button = QPushButton("ボタン")
layout.addWidget(button)
window.setLayout(layout)
window.show()
sys.exit(app.exec_())
この例では、ラベルをレイアウト内で水平方向と垂直方向の両方で中央に配置します。
複雑なUIのためのレイアウトのネスト
より複雑なUIの場合、レイアウトを互いにネストします。これにより、複雑な配置とウィジェット配置のきめ細かい制御が可能になります。
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QHBoxLayout, QLabel, QPushButton
app = QApplication(sys.argv)
window = QWidget()
window.setWindowTitle("ネストされたレイアウト例")
mainLayout = QVBoxLayout()
# 上部セクションの水平レイアウト
topLayout = QHBoxLayout()
topLayout.addWidget(QLabel("左上"))
topLayout.addWidget(QPushButton("右上"))
mainLayout.addLayout(topLayout)
# 下部セクションの垂直レイアウト
bottomLayout = QVBoxLayout()
bottomLayout.addWidget(QLabel("下"))
mainLayout.addLayout(bottomLayout)
window.setLayout(mainLayout)
window.show()
sys.exit(app.exec_())
この例は、垂直レイアウト内に水平レイアウトをネストして2セクションのUIを作成する方法を示しています。
このチュートリアルは、PyQt5でボックスレイアウトを使用するための基礎を提供します。洗練されたユーザーフレンドリーなアプリケーションを構築するためのより高度なレイアウトオプションと機能については、PyQt5のドキュメントを参照してください。