0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

CustomtkinterでMVC

Posted at

カスタム的インターを使って、ボタンに対してコントローラーで関数を設定する方法とラメを使って、ボタンの動きを複雑にして持たせることができる方法を記述します

ラムダ使うって便利、、。

import customtkinter as ctk

# モデルクラス:データの管理を行う
class Model:
    def __init__(self):
        # データを格納する変数を初期化
        self.data = ""

    # データを設定するメソッド
    def set_data(self, data):
        self.data = data

    # データを取得するメソッド
    def get_data(self):
        return self.data

# ビュークラス:ユーザーインターフェースを構築する
class View(ctk.CTkFrame):
    def __init__(self, master):
        super().__init__(master)
        # 実行ボタンを作成し、配置
        self.button = ctk.CTkButton(self, text="実行")
        self.button.pack(pady=10)
        # 出力ラベルを作成し、配置
        self.label = ctk.CTkLabel(self, text="")
        self.label.pack(pady=10)

    # ボタンにコマンドを設定するメソッド
    def set_button_command(self, command):
        self.button.configure(command=command)

    # ラベルに出力テキストを設定するメソッド
    def set_output(self, text):
        self.label.configure(text=text)

# コントローラークラス:モデルとビューの仲介役
class Controller:
    def __init__(self, model, view):
        self.model = model
        self.view = view
        # ボタンがクリックされたときに実行される関数を設定
        self.view.set_button_command(self.execute_function)

    # ボタンがクリックされたときに呼び出される関数
    def execute_function(self):
        # 条件に基づいてタプルを生成し、結果をモデルに保存
        result = (lambda: ("A", ("B", "C") if True else print))()
        self.model.set_data(str(result))
        # モデルからデータを取得してビューに表示
        self.view.set_output(f"結果: {self.model.get_data()}")

# アプリケーションクラス:アプリ全体の設定と起動を行う
class App(ctk.CTk):
    def __init__(self):
        super().__init__()
        # ウィンドウタイトルとサイズを設定
        self.title("MVC CustomTkinter App")
        self.geometry("300x200")

        # モデル、ビュー、コントローラーのインスタンスを作成
        model = Model()
        view = View(self)
        controller = Controller(model, view)
        
        # ビューをウィンドウ内に配置
        view.pack(expand=True, fill="both")

# メインプログラム:アプリケーションの起動処理
if __name__ == "__main__":
    # 外観モードとカラーテーマの設定
    ctk.set_appearance_mode("dark")
    ctk.set_default_color_theme("blue")
    
    # アプリケーションのインスタンスを作成して実行
    app = App()
    app.mainloop()
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?