pythonnの PyQt5 を使ってWindowを表示する

目次

PyQt5(トップレベルで記述)

pip install PyQt5
from PyQt5.QtWidgets import QApplication, QLabel, QWidget
import sys

app = QApplication(sys.argv)

window = QWidget()
window.setWindowTitle('PyQt5 Window')
window.setGeometry(100, 100, 400, 300)

label = QLabel('こんにちは、PyQt5!', parent=window)
label.move(100, 130)

window.show()
sys.exit(app.exec_())

PyQt5 で GUIウィンドウの表示処理を def(関数)にまとめ、エントリーポイントから呼び出す構造にしたい


✅ PyQt5版:ウィンドウ表示を関数化して、mainから呼び出す

from PyQt5.QtWidgets import QApplication, QLabel, QWidget
import sys

# GUIウィンドウ表示の関数化
def show_window():
    app = QApplication(sys.argv)

    window = QWidget()
    window.setWindowTitle('PyQt5 Window')
    window.setGeometry(100, 100, 400, 300)

    label = QLabel('こんにちは、PyQt5!', parent=window)
    label.move(100, 130)

    window.show()
    sys.exit(app.exec_())

# エントリーポイント
def main():
    print("main関数が呼び出されました")
    show_window()

if __name__ == "__main__":
    main()

✅ 解説

要素説明
show_window()GUIウィンドウを生成・表示する処理を関数に切り出し
main()アプリ全体のエントリーポイント
if __name__ == "__main__"このスクリプトが直接実行されたときのみ main() を実行

了解しました!
ここでは、PyQt5でウィンドウをクラス化し、main()から呼び出す構造の基本テンプレートを紹介します。


✅ PyQt5 クラス化版:MainWindow クラスでGUI構成

from PyQt5.QtWidgets import QApplication, QLabel, QWidget
import sys

# ウィンドウをクラスで定義
class MainWindow(QWidget):
    def __init__(self):
        super().__init__()
        self.init_ui()

    def init_ui(self):
        self.setWindowTitle("PyQt5 クラス版ウィンドウ")
        self.setGeometry(100, 100, 400, 300)

        label = QLabel("こんにちは、PyQt5 クラスウィンドウ!", self)
        label.move(80, 130)

# アプリケーションのエントリーポイント
def main():
    print("main() が呼び出されました")
    app = QApplication(sys.argv)

    window = MainWindow()
    window.show()

    sys.exit(app.exec_())

if __name__ == "__main__":
    main()

✅ 解説

要素説明
MainWindow(QWidget)PyQt5のウィンドウを継承したクラス
init_ui()UIパーツ(ラベルなど)をまとめて配置
main()アプリ起動処理。QApplication → MainWindow 作成・表示

✅ 応用アイデア

  • ✅ ボタン付き → QPushButton を追加してクリックイベント処理
  • ✅ テキスト入力 → QLineEdit を追加
  • ✅ 複数画面切り替え → QStackedWidget + 複数ウィジェット構成
  • ✅ メニューやツールバー付き → QMainWindow ベースに変更

いいですね!
今度は、main() の処理自体もクラス化して、「アプリケーションクラス」として管理する構成にしましょう。
これにより、大規模アプリや再利用可能なGUI構造に発展させやすくなります。


✅ PyQt5版:MainWindow + Application クラス構成

from PyQt5.QtWidgets import QApplication, QLabel, QWidget
import sys

# GUI本体クラス(MainWindow)
class MainWindow(QWidget):
    def __init__(self):
        super().__init__()
        self.init_ui()

    def init_ui(self):
        self.setWindowTitle("PyQt5 クラス構成")
        self.setGeometry(100, 100, 400, 300)

        label = QLabel("こんにちは、PyQt5 クラス構成!", self)
        label.move(80, 130)

# アプリケーションクラス(main() の代わり)
class Application:
    def __init__(self):
        print("Application クラスが初期化されました")
        self.app = QApplication(sys.argv)
        self.window = MainWindow()

    def run(self):
        print("Application.run() を実行します")
        self.window.show()
        sys.exit(self.app.exec_())

# エントリーポイント
if __name__ == "__main__":
    application = Application()
    application.run()

✅ 構成のポイント

クラス役割
MainWindowウィンドウのUI構成(QWidget 継承)
Applicationアプリ全体の管理(main関数の役割)
application.run()実行・表示開始

✅ この構成のメリット

  • Application に初期化処理(設定、ロギング、DB接続など)をまとめやすい
  • 複数ウィンドウや状態管理にも対応しやすい
  • GUIテストやモジュール分割にも向いている

🔄 応用可能な構成例

  • MainWindowQMainWindow に変えてメニューバーやステータスバー追加
  • Application クラスに「ユーザーログイン処理」などを追加
  • MainWindowQStackedWidget を使って画面切り替え機能追加

よかったらシェアしてね!
目次