大阪市中央区 システムソフトウェア開発会社

営業時間:平日09:15〜18:15
MENU

ラズパイデスクトップでPyQt5入門(6)Layout management 絶対配置 BoxLayout

著者:國松亜紗子
公開日:2019/09/24
最終更新日:2019/09/24
カテゴリー:技術情報

こんばんは。國松です。
今回はPyQt5のLayout managementを見ていきたいと思います。

参考サイト
ZetCode PyQt5 tutorial
【PythonでGUI】PyQt5 -始めの一歩-

Layout managementはアプリケーションウィンドウにウィジェットを配置する方法です。
絶対配置またはレイアウトクラスを使用してウィジェットを配置できます。

1.Abusolute positioning(絶対配置)
絶対配置は各ウィジェットの位置とサイズをピクセル単位で指定する方法です。
絶対配置を使用する場合以下の制限があります。
・ウィンドウサイズを変更してもウィジェットのサイズと位置は変わらない
・様々なプラットフォームでアプリケーションの外観が異なる可能性がある
・アプリケーションでフォントを変更した場合レイアウトが損なわれる可能性がある
・レイアウトを変更する場合、いちからやり直す必要がある

#! /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つのボタンを右下隅に配置していきます。必要なスペースを作成するには、ストレッチ係数を追加します。

#!/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_())

 

 

レイアウトクラスを使用しているのでアプリケーションウィンドウのサイズを変更してもボタンの配置は変わりません。

    上に戻る