yu00’s blog

プログラミングに関する備忘録です

ウィジェットの自動伸縮の設定

PyQt5入門 PythonでGUI作成 - yu00’s blog


レイアウトでウィジェットを配置するとき,
ウィジェットは自動的に伸縮します.
ここでは自動伸縮の設定について説明します.

自動伸縮するかどうか

自動伸縮をするしないを設定するには,
QWidget.setSizePolicy()を使います.

QWidget.setSizePolicy(horizontalPolicy, verticalPolicy) -> none

QWidget.setSizePolicy(QSizePolicy) -> none

自動伸縮を設定します
horizontalPolicy, verticalPolicy:QSizePolicy.Policy型, 横方向,縦方向の自動伸縮

QSizePolicy.QSizePolicy(horizontalPolicy, verticalPolicy, type = DefaultType) -> QSizePolicy

horizontalPolicy, verticalPolicy:QSizePolicy.Policy型, 横方向,縦方向の自動伸縮


縦方向,横方向それぞれの自動伸縮は次のどれかを指定します.

QSizePolicy.Policy

QSizePolicy.Fixed
ウィジェットのサイズがQWidget.sizeHint()に固定されます.

QSizePolicy.Minimum
ウィジェットのサイズはsizeHint()以下になりません.
拡大はされます.

QSizePolicy.Maximum
ウィジェットのサイズはsizeHint()以上になりません.
縮小はされます.

QSizePolicy.Preferred
基本sizeHint()のサイズになりますが,拡大も縮小もします.

QSizePolicy.Expanding
基本sizeHint()のサイズになりますが,拡大も縮小します.
また,拡大のときは特別な領域も使用して
できるだけ大きくなるようにします.

QSizePolicy.MinimumExpanding
sizeHint()以下になりません.
拡大のときはできるだけ大きくなるようにします.

QSizePolicy.Ignored
ウィジェットのサイズをできるだけ大きくなるようにします.

サンプルコード

#! /usr/bin/python3
# -*- coding: utf-8 -*-

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QHBoxLayout,\
    QSizePolicy

if __name__ == '__main__':
    app = QApplication(sys.argv)
    
    window = QWidget()

    button1 = QPushButton('1')
    button2 = QPushButton('2')
    
    # 自動伸縮を設定
    button1.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed)
    button2.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.Expanding)
    
    layout = QHBoxLayout()
    layout.addWidget(button1)
    layout.addWidget(button2)
    window.setLayout(layout)
    
    window.show()
    sys.exit(app.exec_())

実行例

f:id:yu00:20150906212500p:plain
ボタン2は縦,横とも拡大します.

ウィジェットのサイズ比

2つウィジェット並べてサイズ比を1対2にしたいなど,各ウィジェットのサイズの比率
を変更するにはストレッチを設定します.
ストレッチはQSizePolicyで変更できます.
ただしウィジェットの最小サイズより小さくはならないので注意してください.

QSizePolicy.setHorizontalStretch(stretchFactor) -> none

横方向のストレッチを変更します.
stretchFactor:int型,サイズ比

QSizePolicy.setVerticalStretch(stretchFactor) -> none

縦方向のストレッチを変更します.

サンプルコード

ボタンを2対3の比率で横に配置するプログラムを書いてみます.

#! /usr/bin/python3
# -*- coding: utf-8 -*-

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QHBoxLayout,\
    QSizePolicy

if __name__ == '__main__':
    app = QApplication(sys.argv)
    
    window = QWidget()

    button1 = QPushButton('1')
    button2 = QPushButton('2')

    # ボタンのサイズポリシーを取得
    sizePolicy1 = button1.sizePolicy()
    sizePolicy2 = button2.sizePolicy()
    # ストレッチを2対3にセット
    sizePolicy1.setHorizontalStretch(2)
    sizePolicy2.setHorizontalStretch(3)
    # サイズポリシーをセット
    button1.setSizePolicy(sizePolicy1)
    button2.setSizePolicy(sizePolicy2)
    
    layout = QHBoxLayout()
    layout.addWidget(button1)
    layout.addWidget(button2)
    window.setLayout(layout)
        
    window.show()
    sys.exit(app.exec_())

実行例

f:id:yu00:20150906222534p:plain