class TaskController(): """Links all callbacks from model to update view and links the button of view to update model. Keyword arguments: master -- A Tk constructor. model -- A TaskModel class. """ def __init__(self, master, model): if isinstance(master, tk.Tk) == False: raise Exception("master is not a tk.Tk()") if isinstance(model, TaskModel) == False: raise Exception("model is not a TaskModel") self.__model = model self.__view = TaskView(master) self.__view.update_title(self.__model.get_title()) self.__model.set_callback_title(self.callback) self.__view.toggle_button.config(command=self.__model.toggle) def callback(self, value): """Set the callback of the model to return updated title to View.""" self.__view.update_title(self.__model.get_title()) return value
class TaskController(): """Links all callbacks from model to update view and links the button of view to update model. Keyword arguments: master -- A Tk constructor. model -- A TaskModel class. """ def __init__(self, master, model): if isinstance(master, tk.Tk) == False: raise Exception("master is not a tk.Tk()") if isinstance(model, TaskModel) == False: raise Exception("model is not a TaskModel") self.__model = model self.__view = TaskView(master) self.__view.update_title(self.__model.get_title()) self.__model.set_callback_title(self.callback) self.__view.toggle_button.config(command=self.__model.toggle) def callback(self, value): """Set the callback of the model to return updated title to View.""" self.__view.update_title(self.__model.get_title()) return value
class TaskController(): # Constructor def __init__(self, master, model): ''' if self.master != tk.Tk(): Exception("master is not a tk.Tk()") ''' if isinstance(model, TaskModel) == False: Exception("model is not a TaskModel") self.__model = model # Creates the view self.__view = TaskView(master) # Link View Elements to Controller self.__view.toggle_button.config(command=self.reverse_string) self.title_change(self.__model.get_title()) # Action to Model from View elements def reverse_string(self): self.__model.set_callback_title(self.title_change) self.__model.toggle() # Updates View from Model def title_change(self, title): self.__view.update_title(title)
class TaskController(): def __init__(self, master, model): if not master or not isinstance(master, tk.Tk): raise Exception("master is not a tk.Tk()") self.__view = TaskView(master) self.__model = model self.__model.set_callback_title(self.title_callback) self.__view.update_title(self.__model.get_title()) self.__view.toggle_button.config(command=self.__model.toggle) self.__view.delete_button.config(command=self.task_delete) self.__view.add_button.config(command=self.task_add) for item in self.__model.tasks: self.__view.listbox.insert(tk.END, item) def task_add(self): task = self.__view.entry.get() self.__view.listbox.insert(tk.END, task) self.__model.add_task(task) def task_delete(self): indexes = list(self.__view.listbox.curselection()) indexes.sort(reverse=True) for index in indexes: self.__model.delete_task(index) self.__view.listbox.delete(index) def title_callback(self): # callback should run update_title from view with model.title self.__view.update_title(self.__model.get_title())
class TaskController(): def __init__(self, master, model): if not isinstance(master, tk.Tk): raise Exception("master is not a tk.Tk()") if not isinstance(model, TaskModel): raise Exception("model is not a TaskModel") self.__model = model self.__view = TaskView(master) self.__view.update_title(self.__model.get_title()) self.__model.set_callback_title(self.__view.update_title) self.__view.toggle_button.config(command=self.__model.toggle)
class TaskController(): """docstring for TaskController""" def __init__(self, master, model): # Basic init stuff if not master or not isinstance(master, tk.Tk): raise Exception("master is not a tk.Tk()") if not model or not isinstance(model, TaskModel): raise Exception("model is not a TaskModel") self.__model = model self.__view = TaskView(master) # connecting all the dots. self.__view.update_title(self.__model.get_title()) self.__model.set_callback_title(self.__view.update_title) self.__view.toggle_button.config(command=self.__model.toggle)
class TaskController(): """TaskController Class definition""" #TaskController Constructor: def __init__(self, master, model): if not master or not isinstance(master, tk.Tk): raise Exception("master is not a tk.Tk()") if not TaskModel or not isinstance(model, TaskModel): raise Exception("model is not a TaskModel") #Private attributes: self.__model = model self.__view = TaskView(master) self.__view.update_title(self.__model.get_title()) self.__model.set_callback_title(self.__view.update_title) self.__view.toggle_button.config(command=self.__model.toggle)
class TaskController: def __init__(self, master, model): if master.__class__.__name__ != "Tk": raise Exception("master is not a tk.Tk()") if not isinstance(model, TaskModel): raise Exception("model is not a TaskModel") self.__model = model self.__view = TaskView(master) ''' Update the TaskView to show the string currently represented by the TaskModel ''' self.__view.update_title(model) ''' When the button is clicked, we want it to also update the view's label ''' self.__model.set_callback_title(self.__view.update_title) self.__view.toggle_button.config(command=self.__model.toggle)
class TaskController(): def __init__(self, master, model): if not master or not isinstance(master, tk.Tk): raise Exception("master is not a tk.Tk()") self.__view = TaskView(master) self.__model = model self.__model.set_callback_title(self.title_callback) self.__view.update_title(self.__model.get_title()) self.__view.toggle_button.config(command=self.__model.toggle) def title_callback(self): # callback should run update_title from view with model.title self.__view.update_title(self.__model.get_title())
class TaskController(): """Links all callbacks from model to update view and links the button of view to update model. Keyword arguments: master -- A Tk constructor. model -- A TaskModel class. """ def __init__(self, master, model): if isinstance(master, tk.Tk) == False: raise Exception("master is not a tk.Tk()") if isinstance(model, TaskModel) == False: raise Exception("model is not a TaskModel") self.__model = model self.__view = TaskView(master) self.__view.update_title(self.__model.get_title()) for i in self.__model.load_from_file('task.json'): self.__view.insert(i['task']) self.__model.set_callback_title(self.callback) self.__view.toggle_button.config(command=self.__model.toggle) self.__view.add_button.config(command=self.add_item) self.__view.remove_button.config(command=self.remove_item) def add_item(self): """Add the item to the JSON file.""" self.__model.add_item(self.__view.e.get()) for i in self.__model.load_from_file('task.json'): if i['id'] == (len(self.__model.load_from_file('task.json')) - 1): self.__view.insert(i['task']) def remove_item(self): """Remove the item from the JSON file.""" self.__model.remove_item() if len(self.__model.load_from_file('task.json')) == 0: self.__view.delete(0) else: for i in self.__model.load_from_file('task.json'): self.__view.delete( len(self.__model.load_from_file('task.json'))) def callback(self, value): """Set the callback of the model to return updated title to View.""" self.__view.update_title(self.__model.get_title()) return value
class TaskController(): """Links all callbacks from model to update view and links the button of view to update model. Keyword arguments: master -- A Tk constructor. model -- A TaskModel class. """ def __init__(self, master, model): if isinstance(master, tk.Tk) == False: raise Exception("master is not a tk.Tk()") if isinstance(model, TaskModel) == False: raise Exception("model is not a TaskModel") self.__model = model self.__view = TaskView(master) self.__view.update_title(self.__model.get_title()) for i in self.__model.load_from_file('task.json'): self.__view.insert(i['task']) self.__model.set_callback_title(self.callback) self.__view.toggle_button.config(command=self.__model.toggle) self.__view.add_button.config(command=self.add_item) self.__view.remove_button.config(command=self.remove_item) def add_item(self): """Add the item to the JSON file.""" self.__model.add_item(self.__view.e.get()) for i in self.__model.load_from_file('task.json'): if i['id'] == (len(self.__model.load_from_file('task.json')) - 1): self.__view.insert(i['task']) def remove_item(self): """Remove the item from the JSON file.""" self.__model.remove_item() if len(self.__model.load_from_file('task.json')) == 0: self.__view.delete(0) else: for i in self.__model.load_from_file('task.json'): self.__view.delete(len(self.__model.load_from_file('task.json'))) def callback(self, value): """Set the callback of the model to return updated title to View.""" self.__view.update_title(self.__model.get_title()) return value
class TaskController: def __init__(self, master, model): if master.__class__.__name__ != "Tk": raise Exception("master is not a tk.Tk()") if not isinstance(model, TaskModel): raise Exception("model is not a TaskModel") self.__model = model self.__view = TaskView(master) ''' Update the TaskView to show the string currently represented by the TaskModel ''' self.__view.update_title(model) ''' When the button is clicked, we want it to also update the view's label ''' self.__model.set_callback_title(self.__view.update_title) self.__view.toggle_button.config(command = self.__model.toggle)
class TaskController: # define constructor def __init__(self, master, model): # raise exceptions if isinstance(master, tk.Tk) == False: raise Exception("master is not a tk.Tk()") if isinstance(model, TaskModel) == False: raise Exception("model is not a TaskModel") # set private attributes self.__model = model self.__view = TaskView(master) self.__view.update_title(self.__model.get_title()) # set title for view according to model # link all callbacks from model to update view self.__model.set_callback_title(self.__view.update_title) # self.__view.update_title(self.__model.get_title()) # link view button to update model (link model callback to view) self.__view.toggle_button.configure(command=self.__model.toggle)
class TaskController: def __init__(self, master, model): if not isinstance(master, tk.Tk): raise Exception("master is not a tk.Tk()") if not isinstance(model, TaskModel): raise Exception("model is not a TaskModel") self.__model = model self.__view = TaskView(master) self.__view.update_title(self.__model.get_title()) self.__model.set_callback_title(self.__view.update_title) self.__view.toggle_button.config(command=self.__model.toggle) self.__view.display_tasks(self.__model.get_tasks()) self.__model.set_callback_add_task(self.__view.add_task) self.__view.set_callback_add_task(self.__model.add_task) self.__view.add_entry.bind("<Return>", self.__view.set_task) self.__view.set_callback_remove_task(self.__model.remove_task) self.__view.remove_button.config(command=self.__view.remove_task)
class TaskController: # define constructor def __init__(self, master, model): # raise exceptions if isinstance(master, tk.Tk) == False: raise Exception("master is not a tk.Tk()") if isinstance(model, TaskModel) == False: raise Exception("model is not a TaskModel") # set private attributes self.__model = model self.__view = TaskView(master) self.__view.update_title( self.__model.get_title()) # set title for view according to model # link all callbacks from model to update view self.__model.set_callback_title(self.__view.update_title) # self.__view.update_title(self.__model.get_title()) # link view button to update model (link model callback to view) self.__view.toggle_button.configure(command=self.__model.toggle)
class TaskController: ''' Constructor ''' def __init__(self, master, model): if master.__class__.__name__ != "Tk": raise Exception("master is not a tk.TK()") if not isinstance(model, TaskModel): raise Exception("model is not a TaskModel") self.__model = model self.__view = TaskView(master) ''' Update taskview ''' self.__view.update_title(model) ''' Link all callbacks from model to update view ''' self.__model.set_callback_title(self.__view.update_title) ''' Link the button of view to update model ''' self.__view.toggle_button.config(command = self.__model.toggle)
class TaskController: # Constructor def __init__(self, master, model): # Private attributes self.__model = model self.__view = TaskView(master) self.__view.update_title(self.__model.get_title()) # If master is not tk Class, raise exception if isinstance(master, tk.Tk) == False: raise Exception("master is not a tk.Tk()") # If model is not TaskModel class, raise exception if isinstance(model, TaskModel) == False: raise Exception("model is not a TaskModel") # Link all callbacks from model to update view self.__model.set_callback_title(self.__view.update_title) # link the button of view to update model self.__view.toggle_button.configure(command=self.__model.toggle)
class TaskController(): """ Constructor """ def __init__(self, master, model): if not isinstance(master, tk.Tk): raise Exception("master is not a tk.Tk()") if not isinstance(model, TaskModel): raise Exception("model is not a TaskModel") # private attributes self.__model = model # create the view self.__view = TaskView(master) # link view elements with controller self.__view.toggle_button.config(command=self.reverse_string) self.title_change(self.__model.get_title()) # model from view elements def reverse_string(self): self.__model.set_callback_title(self.title_change) self.__model.toggle() # update view from model def title_change(self, title): self.__view.update_title(title)
import Tkinter as tk from task_model import TaskModel from task_view import TaskView root = tk.Tk() root.withdraw() tv = TaskView(root) tv.update_title("Finish this funny project") root.mainloop()