目次
✅ 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テストやモジュール分割にも向いている
🔄 応用可能な構成例
MainWindow
をQMainWindow
に変えてメニューバーやステータスバー追加Application
クラスに「ユーザーログイン処理」などを追加MainWindow
にQStackedWidget
を使って画面切り替え機能追加