2021-03-01

【備忘録】PySide2 のウィンドウのリサイズを無効にする

Qt for Python (PySide2) は、Qt の Python バインディングを提供するプロジェクトで、オープンソース版の Qt と同じく、LGPLv3 / GPLv3Qt commercial license(商用ライセンス)が適用されています。最近はクロスプラットフォーム用の GUI ライブラリとして使うことが多くなりました。

頻度は多くありませんが、GUI でウィンドウのリサイズをできなくするニーズがあります。

このような場合、OS が Microsoft Windows であれば、下記のようにすれば、ウィンドウのリサイズを無効にできます。

class Example(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowFlags(Qt.MSWindowsFixedSizeDialogHint)
        self.show()

一方、Linux の GNOME デスクトップ環境で同じ方法を試すと、エラーにはならないもののウィンドウのリサイズを無効にできません。参考サイト [1] にヒントがあったので、サンプルを作って備忘録にしました。

本ブログ記事では下記の OS 環境で動作確認をしています。

Fedora 33 (Workstation Edition) x86_64

QLayout クラスを継承した QVBoxLayout のようなジオメトリマネージャを使ってウィジェットを配置した後、vbox.setSizeConstraint(QLayout.SetFixedSize) のようにサイズを固定する指定をします。ウィンドウのタイトルバーで「最小化」と「閉じる」ボタンのみを表示するように指定します。

    def __init__(self):
        super().__init__()
          :
          :
        vbox = QVBoxLayout(self)
        vbox.addWidget(...)
        vbox.setSizeConstraint(QLayout.SetFixedSize)
          :
          :
        self.setLayout(vbox)
        self.setWindowTitle('QPixmap')
        self.setWindowFlags(Qt.WindowMinimizeButtonHint | Qt.WindowCloseButtonHint)
        self.show()

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

qt_pixmap.py

GNOME では「最大化」「最小化」のボタンはデフォルトで表示されませんが、機能は存在していて、設定が反映されています。

qt_pixmap.py の実行例

サンプルの JPEG 画像 sample_picture.jpg は、ファイル名さえ同じであれば何でも良いのですが、何のため、実行例で使用した画像は下記から入手できますので、必要に応じてご利用ください。qt_pixmap.py と同じパス(フォルダ)に保存します。

参考サイト

  1. c++ - how can I fully disable resizing a window including the resize icon when the mouse hovers the border? - Stack Overflow [2013-05-21]

 

ブログランキング・にほんブログ村へ bitWalk's - にほんブログ村 にほんブログ村 IT技術ブログ Linuxへ
にほんブログ村

0 件のコメント: