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_())
実行例
ボタン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_())
実行例