Pythonで「Windowを表示する」方法はいくつかあります。tkinter ライブラリを使ってコードを書くときに、いくつかの方法があります。
目次
トップレベルでの記述
トップレベルで記述します。
import tkinter as tk # ウィンドウ作成 window = tk.Tk() window.title("Tkinter Window") window.geometry("400x300") # 幅x高さ # ラベル表示 label = tk.Label(window, text="こんにちは、Tkinter!") label.pack(pady=20) # ウィンドウ表示 window.mainloop()
手続き型の記述
Pythonで「エントリーポイント(main
)」を使い、関数からウィンドウ表示を行う基本構成を以下に示します。
ここでは Tkinter を使った例で解説しますが、他のGUIライブラリ(PyQt, pygame など)でも同様の構成が可能です。
✅ 目的
main()
関数をエントリーポイントとする- 別関数
show_window()
でウィンドウ表示を行う
🧪 Tkinter使用例:main()
→ show_window()
を呼び出し
import tkinter as tk def show_window(): # ウィンドウ作成 window = tk.Tk() window.title("Mainから呼び出すウィンドウ") window.geometry("400x200") # ラベルを追加 label = tk.Label(window, text="こんにちは!Tkinterウィンドウです。") label.pack(pady=20) # メインループ開始 window.mainloop() def main(): print("main関数が呼び出されました") show_window() # Pythonのエントリーポイント if __name__ == "__main__": main()
📝 解説
要素 | 説明 |
---|---|
def main() | Pythonの入口関数(任意だが推奨) |
if __name__ == "__main__" | スクリプトとして実行されたときだけmainが呼ばれる |
show_window() | 実際にGUIを表示する関数 |
🧠 応用アイデア
show_window()
に引数を渡してウィンドウのタイトルやサイズを動的に変える- ボタンを付けてイベント処理を追加
- 複数画面を制御したり、他のモジュールと連携する構造に拡張
あなたの show_window()
関数を クラス化し、Tkinter ウィンドウをオブジェクト指向で制御できるようにしたコードを以下に示します。
これにより、将来的な機能追加(ボタン、イベント、データ連携など)がしやすくなります。
✅ クラス化した Tkinter GUI の例
import tkinter as tk # ウィンドウ表示クラス class AppWindow: def __init__(self): # Tk ウィンドウの作成 self.window = tk.Tk() self.window.title("クラスから呼び出すウィンドウ") self.window.geometry("400x200") # UI部品の初期化 self.create_widgets() def create_widgets(self): # ラベル作成 label = tk.Label(self.window, text="こんにちは!Tkinterクラスウィンドウです。") label.pack(pady=20) def run(self): # メインループ開始 self.window.mainloop() # エントリーポイント def main(): print("main関数が呼び出されました") app = AppWindow() app.run() if __name__ == "__main__": main()
✅ ポイント解説
構成要素 | 説明 |
---|---|
AppWindow クラス | GUIの全体構造を担当 |
__init__() | ウィンドウと部品の初期化 |
create_widgets() | ラベルやボタンなどの UI 部品を定義する場所 |
run() | mainloop() を呼び出して表示開始 |
main() | エントリーポイントでクラスを実行 |
🧠 拡張しやすくなる例(後から追加できる)
- ボタン追加 →
tk.Button
をcreate_widgets
に追加 - 入力フォーム →
tk.Entry
,tk.Text
- イベントバインド →
button.config(command=self.on_click)
- 複数画面構成(Frame切り替え)
- クラスを他のモジュールから再利用
main()
をクラス化することで、アプリ全体のエントリーポイントをオブジェクト指向的に整理できます。これは「アプリケーションクラス」などと呼ばれるパターンで、GUIの構造を拡張しやすくなります。
✅ main()
をクラス化した Tkinter アプリの例
import tkinter as tk # GUIウィンドウ用クラス class AppWindow: def __init__(self): self.window = tk.Tk() self.window.title("クラス化したTkinterアプリ") self.window.geometry("400x200") self.create_widgets() def create_widgets(self): label = tk.Label(self.window, text="こんにちは!AppWindowからのメッセージ") label.pack(pady=20) def run(self): self.window.mainloop() # アプリ全体の管理クラス(main相当) class Application: def __init__(self): print("Applicationクラスが初期化されました") self.app_window = AppWindow() def run(self): print("Application.run() が呼び出されました") self.app_window.run() # エントリーポイント if __name__ == "__main__": app = Application() app.run()
✅ クラス構造のメリット
クラス | 役割 |
---|---|
AppWindow | GUIの表示とUI部品の管理 |
Application | アプリ全体の初期化と実行管理(main の代替) |
この構造を使うと、以下のような機能も分離して記述できます:
- ログイン状態管理
- 設定読み込み
- 複数ウィンドウ管理
- データベース接続
- GUIテーマ切り替え など
✅ 応用例が欲しい場合は?
- ✅ ボタンやイベント付き
- ✅ 入力フォーム付き
- ✅ フレーム切り替え
- ✅ MVC構成 なども展開可能です。
必要であれば「こういう構成にしたい」と伝えてください。対応したクラス設計を提案します!