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構成 なども展開可能です。
必要であれば「こういう構成にしたい」と伝えてください。対応したクラス設計を提案します!