Frame switching system done

This commit is contained in:
2022-08-30 21:12:04 +02:00
parent 746b40fa18
commit dce1b2f9a5
8 changed files with 241 additions and 117 deletions

View File

@@ -1,8 +1,24 @@
import tkinter as tk
from tkinter import ttk
from controller.Frames import Frames
from controller.HomeController import HomeController
class View(ttk.Frame):
def __init__(self, parent):
class HomeView(ttk.Frame):
"""
View - MainWindow
dec...
@author Jérémi Nihart / EndMove
@link https://git.endmove.eu/EndMove/WebPicDownloader
@version 1.0.0
@since 2022-08-30
"""
# Variables
__controller: HomeController = None
# Constructor
def __init__(self, parent, controller: HomeController):
super().__init__(parent)
# create widgets
@@ -16,62 +32,21 @@ class View(ttk.Frame):
self.email_entry.grid(row=1, column=1, sticky=tk.NSEW)
# save button
self.save_button = ttk.Button(self, text='Save', command=self.save_button_clicked)
self.save_button = ttk.Button(self, text='Save', command=self.event_btn)
self.save_button.grid(row=1, column=3, padx=10)
# message
self.message_label = ttk.Label(self, text='', foreground='red')
self.message_label = ttk.Label(self, text='coucou toi :D JE SUIS SUPER MAN héhéh', foreground='red')
self.message_label.grid(row=2, column=1, sticky=tk.W)
self.grid(row=0, column=0, padx=10, pady=10)
# place this frame
# self.grid(row=0, column=0, padx=5, pady=5)
# self.pack(fill='both', expand=True)
# set the controller
self.controller = None
# Save and setup main controller
self.__controller = controller
controller.set_view(self)
def set_controller(self, controller):
"""
Set the controller
:param controller:
:return:
"""
self.controller = controller
def save_button_clicked(self):
"""
Handle button click event
:return:
"""
if self.controller:
self.controller.save(self.email_var.get())
def show_error(self, message):
"""
Show an error message
:param message:
:return:
"""
self.message_label['text'] = message
self.message_label['foreground'] = 'red'
self.message_label.after(3000, self.hide_message)
self.email_entry['foreground'] = 'red'
def show_success(self, message):
"""
Show a success message
:param message:
:return:
"""
self.message_label['text'] = message
self.message_label['foreground'] = 'green'
self.message_label.after(3000, self.hide_message)
# reset the form
self.email_entry['foreground'] = 'black'
self.email_var.set('')
def hide_message(self):
"""
Hide the message
:return:
"""
self.message_label['text'] = ''
def event_btn(self) -> None:
print("you clicked ! And now you are on info page ... :D")
self.__controller.on_change_view(Frames.Info)

53
view/InfoView.py Normal file
View File

@@ -0,0 +1,53 @@
import tkinter as tk
from tkinter import ttk
from controller.Frames import Frames
from controller.InfoController import InfoController
class InfoView(ttk.Frame):
"""
View - MainWindow
dec...
@author Jérémi Nihart / EndMove
@link https://git.endmove.eu/EndMove/WebPicDownloader
@version 1.0.0
@since 2022-08-30
"""
# Variables
__controller: InfoController = None
# Constructor
def __init__(self, parent, controller: InfoController):
super().__init__(parent)
# create widgets
# label
self.label = ttk.Label(self, text='Email:')
self.label.grid(row=1, column=0)
# email entry
# self.email_var = tk.StringVar()
# self.email_entry = ttk.Entry(self, textvariable=self.email_var, width=30)
# self.email_entry.grid(row=1, column=1, sticky=tk.NSEW)
# save button
self.save_button = ttk.Button(self, text='just a button', command=self.event_btn)
self.save_button.grid(row=1, column=3, padx=10)
# message
self.message_label = ttk.Label(self, text='Je suis super man comment allez vous heheheh je suis toutou', foreground='red')
self.message_label.grid(row=2, column=0, sticky=tk.EW)
# place this frame
# self.grid(row=0, column=0, padx=5, pady=5, sticky=tk.NSEW)
# self.pack(fill='both', expand=True)
# Save and setup main controller
self.__controller = controller
controller.set_view(self)
def event_btn(self) -> None:
print("you clicked on the button that is on the info view!")
print("got redirected to the home view :D")
self.__controller.on_change_view(Frames.Home)

View File

@@ -1,15 +1,24 @@
from controller.MainController import MainController
import tkinter as tk
from tracemalloc import Frame
from controller.MainController import MainController
from controller.Frames import Frames
class MainWindow(tk.Tk):
"""
View - MainWindow
View - MainWindow
dec...
@author Jérémi Nihart / EndMove
@link https://git.endmove.eu/EndMove/WebPicDownloader
@version 1.0.0
@since 2022-08-30
"""
# Variables
__controller: MainController = None
__views: dict = None
__current_view = None
# Constructor
def __init__(self, controller: MainController):
@@ -22,11 +31,16 @@ class MainWindow(tk.Tk):
self.title('Tkinter app')
self.geometry('450x250')
self.resizable(False, False)
self.config(bg='#f7ef38')
self.rowconfigure(0, weight=1)
self.columnconfigure(0, weight=1)
# Save and setup main controller
self.__controller = controller
controller.set_view(self)
# START App methods
def add_view(self, frame, view):
"""
[function for app]
@@ -34,17 +48,21 @@ class MainWindow(tk.Tk):
:frame: -> the frame id of the view to add.
"""
self.__views[frame] = view
# END App methods
# START Controller methods
def show_frame(self, frame):
"""
[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)
new_view = self.__views.get(frame)
if new_view:
if self.__current_view:
self.__current_view.pack_forget()
new_view.pack(fill=tk.BOTH, expand=False)
self.__current_view = new_view
else:
raise ValueError("Unable to find the requested Frame")
raise ValueError("Unable to find the requested Frame")
# END Controller methods