目次
✅ 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を使って画面切り替え機能追加