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

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.Buttoncreate_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()

✅ クラス構造のメリット

クラス役割
AppWindowGUIの表示とUI部品の管理
Applicationアプリ全体の初期化と実行管理(mainの代替)

この構造を使うと、以下のような機能も分離して記述できます:

  • ログイン状態管理
  • 設定読み込み
  • 複数ウィンドウ管理
  • データベース接続
  • GUIテーマ切り替え など

✅ 応用例が欲しい場合は?

  • ✅ ボタンやイベント付き
  • ✅ 入力フォーム付き
  • ✅ フレーム切り替え
  • ✅ MVC構成 なども展開可能です。

必要であれば「こういう構成にしたい」と伝えてください。対応したクラス設計を提案します!

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