ラズパイデスクトップでPyQt5入門(6)Layout management 絶対配置 BoxLayout
こんばんは。國松です。
今回はPyQt5のLayout managementを見ていきたいと思います。
参考サイト
ZetCode PyQt5 tutorial
【PythonでGUI】PyQt5 -始めの一歩-
Layout managementはアプリケーションウィンドウにウィジェットを配置する方法です。
絶対配置またはレイアウトクラスを使用してウィジェットを配置できます。
1.Abusolute positioning(絶対配置)
絶対配置は各ウィジェットの位置とサイズをピクセル単位で指定する方法です。
絶対配置を使用する場合以下の制限があります。
・ウィンドウサイズを変更してもウィジェットのサイズと位置は変わらない
・様々なプラットフォームでアプリケーションの外観が異なる可能性がある
・アプリケーションでフォントを変更した場合レイアウトが損なわれる可能性がある
・レイアウトを変更する場合、いちからやり直す必要がある
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | #! /usr/bin/python3 #coding:utf-8 """ This ecample shows three labels on a window using absolute positioning """ import sys from PyQt5.QtWidgets import QWidget, QLabel, QApplication class Example(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): #ラベル名を設定 lbl1 = QLabel('Zetcode', self) #ラベルを(x=15,y=10)へ移動 lbl1.move(15,10) lbl2 = QLabel('tutorials', self) lbl2.move(35,40) lbl1 = QLabel('for programmers', self) lbl1.move(55,70) self.setGeometry(300,300,250, 150) self.setWindowTitle('Absolute') self.show() if __name__=='__main__': app = QApplication(sys.argv) ex = Example() sys.exit(app.exec_()) |
move()メソッドでx座標とy座標を指定してウィジェットで配置します。今回はラベルを配置します。座標は左上を原点(0,0)としてx座標は左から右に向かって大きくなりy座標は上から下に向かって大きくなります。
次はレイアウトクラスを使用していきます。
2.Box Layout
QHBoxLayoutとQVBoxLayoutはウィジェットを水平方向と垂直方向に並べえる基本的なレイアウトクラスです。
今回は1つの水平ボックスと1つの垂直ボックスを使用して2つのボタンを右下隅に配置していきます。必要なスペースを作成するには、ストレッチ係数を追加します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | #!/usr/binpython3 #coding:utf-8 """ In this example, we position two push buttons in the bottom-right corner of the window """ import sys from PyQt5.QtWidgets import (QWidget,QPushButton, QHBoxLayout, QVBoxLayout,QApplication) class Example(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): #2つのブッシュボタンを作成 okButton = QPushButton("OK") cancelButton =QPushButton("Cancel") #水平なボックスを作成 hbox = QHBoxLayout() #ストレッチファクタによってボタンの左側に伸縮性のあるスペースができる #ボタンは右による hbox.addStretch(1) hbox.addWidget(okButton) hbox.addWidget(cancelButton) #垂直なボックスを作成 vbox = QVBoxLayout() #垂直方向に伸縮性のあるスペースができる vbox.addStretch(1) #ボタン付き水平ボックスが右下に移る vbox.addLayout(hbox) #メインウィンドウのレイアウトを設定する self.setLayout(vbox) self.setGeometry(300,300,300,150) self.setWindowTitle('BUtton') self.show() if __name__ == '__main__': app = QApplication(sys.argv) ex = Example() sys.exit(app.exec_()) |
レイアウトクラスを使用しているのでアプリケーションウィンドウのサイズを変更してもボタンの配置は変わりません。