PyQt5-レイアウト管理

GUIウィジェットは、ピクセル単位で測定された絶対座標を指定することにより、コンテナウィンドウ内に配置できます。座標は、setGeometry()メソッドで定義されたウィンドウの寸法を基準にしています。

setGeometry()構文

QWidget.setGeometry(xpos, ypos, width, height)

次のコードスニペットでは、300 x 200ピクセルのサイズのトップレベルウィンドウがモニターの位置(10、10)に表示されています。

import sys
from PyQt4 import QtGui

def window():
   app = QtGui.QApplication(sys.argv)
   w = QtGui.QWidget()
	
   b = QtGui.QPushButton(w)
   b.setText("Hello World!")
   b.move(50,20)
	
   w.setGeometry(10,10,300,200)
   w.setWindowTitle(“PyQt”)
   w.show()
   sys.exit(app.exec_())
	
if __name__ == '__main__':
   window()

A PushButton ウィジェットがウィンドウに追加され、ウィンドウの左上の位置から右に50ピクセル、下に20ピクセルの位置に配置されます。

ただし、この絶対位置は、次の理由により適切ではありません。

  • ウィンドウのサイズを変更しても、ウィジェットの位置は変わりません。

  • 解像度が異なるディスプレイデバイスでは、外観が均一でない場合があります。

  • フォーム全体を再設計する必要がある場合があるため、レイアウトの変更は困難です。

PyQt APIは、コンテナ内のウィジェットの配置をより洗練された方法で管理するためのレイアウトクラスを提供します。絶対配置に対するレイアウトマネージャーの利点は次のとおりです。

  • ウィンドウ内のウィジェットは自動的にサイズ変更されます。

  • さまざまな解像度のディスプレイデバイスで均一な外観を保証します。

  • ウィジェットを動的に追加または削除することは、再設計することなく可能です。

Qtツールキットは、QtDesignerユーティリティで使用できるさまざまなレイアウトを定義します。

これは、この章で1つずつ説明するクラスのリストです。

シニア番号 クラスと説明
1 QBoxLayout

QBoxLayoutクラスは、ウィジェットを垂直または水平に並べます。その派生クラスは、QVBoxLayout(ウィジェットを垂直方向に配置するため)とQHBoxLayout(ウィジェットを水平方向に配置するため)です。

2 QGridLayout

GridLayoutクラスオブジェクトは、行と列に配置されたセルのグリッドで表示されます。クラスにはaddWidget()メソッドが含まれています。セルの行数と列数を指定することで、任意のウィジェットを追加できます。

3 QFormLayout

QFormLayoutは、各行がラベルに関連付けられた入力フィールドで構成される2列のフォームを作成するための便利な方法です。慣例として、左側の列にはラベルが含まれ、右側の列には入力フィールドが含まれます。