私の問題は次のとおりです。Web のバックグラウンドから来て、これを行うのに問題はありませんでしたが、Python デスクトップ アプリケーションでは、MVC パターンに従ってコードを整理する最善の方法が実際にはわかりません。
ユーザー入力に従ってボタンを押すと、データベースで利用可能な同様のエントリが表示されるウィンドウを作成したいと考えています。窓は私の視点です。
したがって、基本的にこれらの関係は次のとおりです。
1)通信コントローラ --> ビュー
コントローラーにはビューのインスタンスがあり、view.show_data() などの公開されたメソッドを使用できます。これが進むべき道だと思います。
# Controller
my_view = View()
...
my_view.show_data(whatever_data)
2)通信ビュー --> コントローラ
ユーザーがテキストを挿入すると、コントローラーのメソッドが起動され、データベース内の必要なデータをモデルに要求できるようになります。問題は、ビューがコントローラーにそのメソッドを起動する必要があることを伝える最良の方法がわからないことです。
私の最初のアイデアは、コントローラーの参照をビューに渡し、ビューにイベントをバインドすることです。次のようになります。
# Controller
my_view = View(self)
my_model = Model()
...
def on_user_input(self):
# process the input
user_input = ...
self.my_model.method_to_get_info(user_input)
そしてビュー:
# View
def __init__(self, controller):
self.controller_reference = controller
self.launch_gui()
self.config_binds()
def launch_gui(self):
# ... configure all the GUI itself
self.button = ...
def config_binds(self):
self.button.Bind(wx.EVT_BUTTON, self.controller_reference.on_user_input())
しかし、この「閉じた円」の関係はあまりきれいな解決策ではないと思います。ビューはコントローラーで参照され、コントローラーはビューで参照されます。ビューとコントローラーの間に緊密な関係が生まれると思います。
これを行う方法は何ですか?