From 746b40fa18022538c72b66c4c7e132c713a3daaf Mon Sep 17 00:00:00 2001 From: EndMove Date: Tue, 30 Aug 2022 13:51:50 +0200 Subject: [PATCH] fixing multi frame switching --- controller/Frames.py | 4 ++-- controller/MainController.py | 11 +++++++---- main.py | 4 +++- version.txt | 1 + view/HomeView.py | 2 ++ view/MainWindow.py | 37 +++++++++++++++++++++++++++--------- 6 files changed, 43 insertions(+), 16 deletions(-) create mode 100644 version.txt diff --git a/controller/Frames.py b/controller/Frames.py index b677dff..b8acd52 100644 --- a/controller/Frames.py +++ b/controller/Frames.py @@ -2,5 +2,5 @@ from enum import Enum class Frames(Enum): - Home = 1 - Info = 2 \ No newline at end of file + Home = 1 # Home view + Info = 2 # Info & copyright view \ No newline at end of file diff --git a/controller/MainController.py b/controller/MainController.py index 7e697cd..8fb6331 100644 --- a/controller/MainController.py +++ b/controller/MainController.py @@ -1,4 +1,3 @@ -from controller.Frames import Frames class MainController: @@ -8,20 +7,24 @@ class MainController: desc... """ # Variables - view = None + __view = None # Constructor def __init__(self) -> None: pass - def change_frame(self, frame: Frames.value) -> None: + def change_frame(self, frame) -> None: """ [function for controller] + + :frame: -> The frame to be displayed on the screen. """ pass def set_view(self, view) -> None: """ [function for view] + + :view: -> The view that this controller manage. """ - self.view = view \ No newline at end of file + self.__view = view \ No newline at end of file diff --git a/main.py b/main.py index 1e0665c..6e8ca3b 100644 --- a/main.py +++ b/main.py @@ -27,6 +27,7 @@ # # set the controller to view # view.set_controller(controller) +from controller.Frames import Frames from controller.MainController import MainController from view.MainWindow import MainWindow from view.View import View @@ -37,6 +38,7 @@ if __name__ == '__main__': app = MainWindow(controller) - app.set_view(View(app)) + app.add_view(Frames.Home, View(app)) + app.show_frame(Frames.Home) app.mainloop() \ No newline at end of file diff --git a/version.txt b/version.txt new file mode 100644 index 0000000..afaf360 --- /dev/null +++ b/version.txt @@ -0,0 +1 @@ +1.0.0 \ No newline at end of file diff --git a/view/HomeView.py b/view/HomeView.py index 96b5ac0..f3f4bea 100644 --- a/view/HomeView.py +++ b/view/HomeView.py @@ -23,6 +23,8 @@ class View(ttk.Frame): self.message_label = ttk.Label(self, text='', foreground='red') self.message_label.grid(row=2, column=1, sticky=tk.W) + self.grid(row=0, column=0, padx=10, pady=10) + # set the controller self.controller = None diff --git a/view/MainWindow.py b/view/MainWindow.py index b0a3e0d..7810d51 100644 --- a/view/MainWindow.py +++ b/view/MainWindow.py @@ -8,24 +8,43 @@ class MainWindow(tk.Tk): dec... """ # Variables - controller: MainController + __controller: MainController = None + __views: dict = None # Constructor def __init__(self, controller: MainController): super().__init__() + # Init view repository + self.__views = {} + # Init main window - self.title('Tkinter MVC Demo') + self.title('Tkinter app') + self.geometry('450x250') + self.resizable(False, False) # Save and setup main controller - self.controller = controller + self.__controller = controller controller.set_view(self) - def set_view(self, view): - self.view = view - self.view.grid(row=0, column=0, padx=10, pady=10) + def add_view(self, frame, view): + """ + [function for app] + + :frame: -> the frame id of the view to add. + """ + self.__views[frame] = view - # Section Interface def show_frame(self, frame): - pass - # End Section Interface \ No newline at end of file + """ + [function for app & controller] + + :frame: -> the frame if of the view to display. + """ + print(self.__views) + if self.__views.get(frame): + self.__views.get(frame).tkraise() + #self.view = self.__views.get(frame) + #self.view.grid(row=0, column=0) + else: + raise ValueError("Unable to find the requested Frame") \ No newline at end of file