【QtCreaterで】ウィンドウとウィジェットのサイズを追従させる方法

今回はQtCreaterで少しばかりハマった所を記事にします。ハマった部分はWindowのサイズと各Widget(テキストボックスとかボタンとか)のサイズ連動の部分です。

PyQt?

PyQtは、クロスプラットフォームなGUIツールキット『Qt』のPythonバインディングで、PythonでGUIを構築する際に利用できるライブラリのこと。PyQtの他には、PySide・PyGTK・wxPython・Tkinterなどが存在する。なお、TkinterがPythonの標準ライブラリとして組み込まれてます。

なお、PyQtは以下のようにプログラムを書いてフォームの設計をしていきます。

import sys
from PyQt5 import QtWidgets

if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    
    window = QtWidgets.QWidget()
    window.show()
    
    sys.exit(app.exec_())

しかし、C#からプログラマ人生を始めた私はGUIの設計はオブジェクトを配置して、プロパティをいじるものと思っており、コードで見た目をどうにかするという感覚があまりありませんでした。(最近そうも言ってられなくなってきてます・・・)

で、いろいろ探していたらQtCreaterと呼ばれるものがありました。

QtCreater(Designer)?

Qt Creatorは,Qtアプリケーションの開発に特化したマルチプラットフォームで利用できる軽量統合開発環境です。MicrosoftのVisualStudioのWinFormのような感覚でフォームを設計してプログラムを書けるとてもありがたいツールです。

何にはまった?

ハマった部分は最初に書いた通りWindowのサイズと各Widget(テキストボックスとかボタンとか)のサイズ連動の部分です。

実際に見てもらうと話が早いかと思います。以下のフォームを作成して、アプリケーションを立ち上げたのち

ウィンドウサイズを変更すると以下のようにウィジェットが連動せず、無地の平原が広がってしまいます…

この解決手段を調べるとコードを一行追加するとかそういった記事がたくさん見つかりました。コードは以下のような感じのようです。

object.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed)

ただ、QtCreaterでフォームをザクザク作ってきて、ウィジェットの連動部だけ完成したpythonファイルを開いて上記のコードを追加するのは嫌だったので、QtCreaterでどうにかできないか調べました。

設定手順

まず配置

好きなWidgetを好きに配置していきます。今回は、テキストエディットとボタンを二つ置いときます。

オブジェクトインスペクタをいじる

起動したら右側の上に表示されているはずの「オブジェクトインスペクタ」

このメインウインドウ(一番上のオブジェクト)を右クリックすると[レイアウト]というのがあるので、この中からいい感じのものを選択します。(今回は垂直に並べるを選択しています。)

そうすると、勝手にフォームを並べ替えてくれます。

ちなみに、ボタンは横が良かったという場合は、先にボタンを二つ選択した状態でメニューバーの下にある「水平に並べる」というアイコンを選択しておくといいです。

以上。

結果

しっかり連動してますね。

コメントする

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です