PySideメモ

レイアウト方法

2016/3/22
PySide 1.2.4Python 2.7.11

レイアウトの種類

PySideではレイアウトを使ってウィジェットを配置します。ウィジェットの位置関係、サイズは使用しているレイアウトに従って決まります。

レイアウトには以下の物があります。

レイアウトの中にレイアウトを配置する

QHBoxLayout、QVBoxLayout、QGridLayoutにはaddLayout()メソッドがあり、レイアウトを追加することができます。
LayoutInLayout.py
# -*- coding: utf-8 -*-
 
from PySide.QtCore import *
from PySide.QtGui import *

class MyLayoutDialog(QDialog):
        def __init__(self, parent=None):
                super(MyLayoutDialog, self).__init__(parent)
                self.setWindowTitle("My Layout Dialog")
               
                # 並べるボタンを作成
                buttonA = QPushButton("Button A")
                buttonB = QPushButton("Button B")
                buttonC = QPushButton("Button C")
                buttonD = QPushButton("Button D")
                buttonE = QPushButton("Button E")
               
                # 垂直方向にボタンを3つ並べたレイアウト
                layoutA = QVBoxLayout()
                layoutA.addWidget(buttonA)
                layoutA.addWidget(buttonB)
                layoutA.addWidget(buttonC)

                # 垂直方向にボタンを2つ並べたレイアウト
                layoutB = QVBoxLayout()
                layoutB.addWidget(buttonD)
                layoutB.addWidget(buttonE)
               
                # 作成済みのレイアウトを水平方向に並べる
                parentLayout = QHBoxLayout()
                parentLayout.addLayout(layoutA)
                parentLayout.addLayout(layoutB)
               
                self.setLayout(parentLayout)

if __name__ == '__main__':
        import sys
        app = QApplication(sys.argv)
        ui = MyLayoutDialog()
        ui.show()
        app.exec_()
LayoutInLayout実行結果

位置とサイズを指定してウィジェットを配置する

一般的ではありませんが親ウィンドウに対する位置とサイズを指定してレイアウトを使用せずにウィジェットを配置することも可能です。
AbsolutePosition.py
# -*- coding: utf-8 -*-
 
from PySide.QtCore import *
from PySide.QtGui import *

class MyLayoutDialog(QDialog):
        def __init__(self, parent=None):
                super(MyLayoutDialog, self).__init__(parent)
                self.setWindowTitle("My Layout Dialog")
               
                # 親ウィジェットを指定して並べるボタンを作成
                buttonA = QPushButton("Button A", self)
                buttonB = QPushButton("Button B", self)
                buttonC = QPushButton("Button C", self)
               
                # 親ウィンドウ内に対する位置とサイズをそれぞれのボタンに指定
                buttonA.setGeometry(0, 0, 100, 50)
                buttonB.setGeometry(150, 0, 200, 150)
                buttonC.setGeometry(0, 160, 250, 50)

if __name__ == '__main__':
        import sys
        app = QApplication(sys.argv)
        ui = MyLayoutDialog()
        ui.show()
        app.exec_()
AbsolutePosition実行結果