Pyside2+Qt Designer

内容について

今回はpython環境でメインウィンドウのデザインをQt Designerを使用して行い、Qt Designerで作成したファイルをpythonコード上から呼び出すところまでの手順を紹介します。

環境 Python = 3.8 Pyside2 = 5.13.2

1. Qt Designerの起動

Pyside2がインストールされているpython環境でコンソールを開き”designer”コマンドを実行してQt Designerを起動し、テンプレートから main windowを選択して”作成”ボタンで素の状態のウィンドウを生成。

$ desinger
テンプレートの選択
何も配置されていない状態のメインウィンドウ

2. アイテムの配置

ウィジェットボックスからPush ButtonとPlain Text Editをドラッグ&ドロップしてウィンドウ上に配置します

3. uiファイルの保存

ファイル(F) → 保存(S)とクリックするか、Ctrl+Sでuiファイルを保存します。この例ではファイル名はmainwindow.uiとします。

4. uiファイルからpyファイルを生成

コンソールで以下のコマンドを実行しuiファイルからpyファイルを生成

$ pyside2-uic -o ui_mainwindow.py mainwindow.ui

5. pythonコードへの組込み

uicで生成されたpyファイルをインポートし、下記のようなコードを実行するとウィンドウが表示されます。

import sys
from PySide2.QtWidgets import QApplication, QMainWindow

from ui_mainwindow import Ui_MainWindow


class MainWindow(QMainWindow):
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)


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

    w = MainWindow()
    w.show()

    sys.exit(app.exec_())

C++/Qtでもほとんど同じようなコードでuiファイルを利用します。

  1. QMainWindowクラスを継承したクラスを定義
  2. メンバ変数としてUi_MainWindowクラスインスタンスを生成
  3. setupUiを実行しdesignerで配置した状態を適用
  4. 適時マウスがクリックされた場合やキーボードが押された場合などのイベント処理をカスタムクラスで拡張していく

6. QApplicationについて

プログラムの最初にQApplicationのインスタンスを生成してウィンドウシステムを初期化。w.show()でウィンドウが表示状態にセットされた後exec_()関数を実行することでイベントループが開始されウィンドウが表示されます。イベントループが駆動することで画面の更新やキーボードイベントの処理が行えるようになります。その後ウィンドウが閉じられるとexec_()が終了し、アプリケーションが終了します。