2024-03-08

【備忘録】sizeHint の活用 ~ PySide6

PySide (Qt for Python) は、Qt(キュート)の Python バインディングで、GUI などを構築するためのクロスプラットフォームなライブラリです。Linux/X11, macOS および Microsoft Windows をサポートしています。配布ライセンスは LGPL で公開されています。

今回のテーマ
  • GUI のウィンドウサイズを固定します。

下記の OS 環境で動作確認をしています。

Fedora Workstation 39 x86_64
Python 3.12.2
PySide6 6.6.2

PySide6 で、ウィンドウのサイズを固定するには次のようにします。

self.setFixedSize(600, 400)

これで、ウィンドウのサイズは 600 x 400 に固定され、変更できなくなります。

ひとつ問題があります。作成した GUI のウィンドウの最小サイズをどのように入手するのか、ということです。そんなとき、下記のように sizeHint メソッドを利用すれば簡単に解決できます。

self.setFixedSize(self.sizeHint())

サンプルを以下に示します。

qt_gridlayout_top_left_resize.py
#!/usr/bin/env python
# coding: utf-8
import sys
from PySide6.QtCore import Qt
from PySide6.QtWidgets import (
QApplication,
QGridLayout,
QPushButton,
QWidget,
)
class Example(QWidget):
def __init__(self):
super().__init__()
self.setStyleSheet('QWidget {background-color: gray;}')
self.setWindowTitle('QGridLayoout sample')
layout = QGridLayout()
layout.setSpacing(5)
layout.setAlignment(
Qt.AlignmentFlag.AlignTop | Qt.AlignmentFlag.AlignLeft
)
self.setLayout(layout)
y_max = 3
x_max = 3
for y in range(y_max):
for x in range(x_max):
v = y * x_max + x + 1
but = QPushButton(str(v))
but.setStyleSheet("""
QPushButton {
background-color: white;
padding: 1em 2em;
}
""")
layout.addWidget(but, y, x)
self.setFixedSize(self.sizeHint())
def main():
app = QApplication(sys.argv)
ex = Example()
ex.show()
sys.exit(app.exec())
if __name__ == '__main__':
main()
qt_gridlayout_top_left_resize.py の実行例

なぜこのような簡単なテーマを備忘録にするのかというと、それは、自分が長い間 Tcl/Tk で GUI アプリを作っていたからです。Tk では、ウィンドウのサイズ変更を wm コマンドで制御しているため [1]、そのやり方にとらわれてしまって PySide6 ではどうするのか、かなり長い間解らなかったからです。

wm resizable window ?width height?

結局、自分のための備忘録なのです。🙇🏻

参考サイト

  1. wm resizable [Tcl/Tk manual]

ブログランキング・にほんブログ村へ bitWalk's - にほんブログ村 にほんブログ村 IT技術ブログ オープンソースへ
にほんブログ村

オープンソース - ブログ村ハッシュタグ
#オープンソース



0 件のコメント: