MVC Finished AND Login Generator Begin
This commit is contained in:
parent
f21ccb082d
commit
1246e905d3
|
@ -2949,7 +2949,7 @@ class MainWindow(Frame):
|
||||||
elif number < MyNumber:
|
elif number < MyNumber:
|
||||||
MyLabel.config(text="My number is bigger")
|
MyLabel.config(text="My number is bigger")
|
||||||
else:
|
else:
|
||||||
MyLabel.cionfig(text="You WIN!")
|
MyLabel.config(text="You WIN!")
|
||||||
else:
|
else:
|
||||||
MyLabel.config(text="I need numbers!")
|
MyLabel.config(text="I need numbers!")
|
||||||
|
|
||||||
|
@ -2980,7 +2980,6 @@ We'll add the GUI view in a bit.
|
||||||
```python
|
```python
|
||||||
from tkinter import *
|
from tkinter import *
|
||||||
|
|
||||||
|
|
||||||
class ConsoleView(object):
|
class ConsoleView(object):
|
||||||
"""A view for console."""
|
"""A view for console."""
|
||||||
|
|
||||||
|
@ -3029,14 +3028,16 @@ class Controller(object):
|
||||||
if self.view is ConsoleView:
|
if self.view is ConsoleView:
|
||||||
self.view = self.view()
|
self.view = self.view()
|
||||||
self._run_console_view()
|
self._run_console_view()
|
||||||
elif self.view is WxView:
|
elif self.view is TkinterView:
|
||||||
app = wx.App()
|
root = Tk()
|
||||||
|
root.title("Task Manager")
|
||||||
|
root.geometry("500x300")
|
||||||
self.view = self.view()
|
self.view = self.view()
|
||||||
self.view._set_controller(self)
|
self.view._set_controller(self)
|
||||||
app.MainLoop()
|
root.mainloop()
|
||||||
|
|
||||||
def get_task_from_model(self, idx):
|
def get_task_from_model(self, idx):
|
||||||
"""Needed for the WxView to communicate with the controller."""
|
"""Needed for the TkinterView to communicate with the controller."""
|
||||||
task = self.model.get_task(idx)
|
task = self.model.get_task(idx)
|
||||||
self.view.show_task(task)
|
self.view.show_task(task)
|
||||||
|
|
||||||
|
@ -3055,7 +3056,6 @@ class Controller(object):
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
view = ConsoleView
|
view = ConsoleView
|
||||||
# view = WxView
|
|
||||||
app = Controller(view)
|
app = Controller(view)
|
||||||
app.run()
|
app.run()
|
||||||
```
|
```
|
||||||
|
@ -3063,8 +3063,7 @@ if __name__ == "__main__":
|
||||||
And now with the implemented `TkinterView` class.
|
And now with the implemented `TkinterView` class.
|
||||||
|
|
||||||
```python
|
```python
|
||||||
import wx
|
from tkinter import *
|
||||||
|
|
||||||
|
|
||||||
class ConsoleView(object):
|
class ConsoleView(object):
|
||||||
"""A view for console."""
|
"""A view for console."""
|
||||||
|
@ -3084,38 +3083,45 @@ class ConsoleView(object):
|
||||||
print("error: {}".format(msg))
|
print("error: {}".format(msg))
|
||||||
|
|
||||||
|
|
||||||
class WxView(wx.Dialog):
|
class TkinterView(Frame):
|
||||||
"""A view using a wx.Dialog window"""
|
"""A view using a wx.Dialog window"""
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
wx.Dialog.__init__(self, None, title="Task Manager")
|
Frame.__init__(self, master=None)
|
||||||
self.panel = wx.Panel(self)
|
#Panel
|
||||||
self.box = wx.BoxSizer(wx.VERTICAL)
|
self.panel = PanedWindow(self, bg="green")
|
||||||
self.task = wx.StaticText(self.panel, label="your task")
|
self.panel.pack(fill=BOTH, expand=True)
|
||||||
self.idx = wx.SpinCtrl(self.panel)
|
|
||||||
self.button = wx.Button(self.panel, label="submit")
|
#Task Label
|
||||||
self.button.Bind(wx.EVT_BUTTON, self.select_task)
|
self.task = Label(self.panel, text="your task")
|
||||||
self.box.Add(self.task, 0, wx.EXPAND, 1)
|
self.task.pack(expand=True)
|
||||||
self.box.Add(self.idx, 0, wx.EXPAND, 1)
|
|
||||||
self.box.Add(self.button, 0, wx.EXPAND, 1)
|
#SpinBox
|
||||||
self.panel.SetSizer(self.box)
|
self.idx = Spinbox(self.panel, from_=0, to=2, wrap=True )
|
||||||
self.Show()
|
self.idx.pack(side= TOP)
|
||||||
|
|
||||||
|
#Button
|
||||||
|
self.button = Button(self.panel, text="submit", command=lambda : self.select_task())
|
||||||
|
self.button.pack(ipadx=60, ipady=30)
|
||||||
|
|
||||||
|
self.pack(fill=BOTH, expand=True)
|
||||||
|
|
||||||
def _set_controller(self, controller):
|
def _set_controller(self, controller):
|
||||||
"""Set the controller so the view can communicate it's requests to it
|
"""Set the controller so the view can communicate it's requests to it
|
||||||
and update it's values too."""
|
and update it's values too."""
|
||||||
self.controller = controller
|
self.controller = controller
|
||||||
|
|
||||||
def select_task(self, event):
|
def select_task(self):
|
||||||
"""Gets the index to look up in the model and submits the request to
|
"""Gets the index to look up in the model and submits the request to
|
||||||
the controller."""
|
the controller."""
|
||||||
idx = self.idx.GetValue()
|
idx = self.idx.get()
|
||||||
self.controller.get_task_from_model(idx)
|
self.controller.get_task_from_model(idx)
|
||||||
|
|
||||||
def show_task(self, task):
|
def show_task(self, task):
|
||||||
"""Updates the visual label in the view with the task. This method is
|
"""Updates the visual label in the view with the task. This method is
|
||||||
called from the controller."""
|
called from the controller."""
|
||||||
self.task.SetLabel(task)
|
self.task.config(text=task)
|
||||||
|
|
||||||
|
|
||||||
class Model(object):
|
class Model(object):
|
||||||
"""The model houses add data and should implement all methods related to
|
"""The model houses add data and should implement all methods related to
|
||||||
|
@ -3128,7 +3134,7 @@ class Model(object):
|
||||||
If no task is found, it returns an error message that will be displayed
|
If no task is found, it returns an error message that will be displayed
|
||||||
in the view (via the controller)."""
|
in the view (via the controller)."""
|
||||||
try:
|
try:
|
||||||
task = Model.db[idx]
|
task = Model.db[int(idx)]
|
||||||
except IndexError:
|
except IndexError:
|
||||||
task = "task with {} not found!".format(idx)
|
task = "task with {} not found!".format(idx)
|
||||||
return task
|
return task
|
||||||
|
@ -3139,23 +3145,25 @@ class Controller(object):
|
||||||
|
|
||||||
def __init__(self, view):
|
def __init__(self, view):
|
||||||
self.model = Model()
|
self.model = Model()
|
||||||
self.view = view
|
self.view = view
|
||||||
|
|
||||||
def run(self):
|
def run(self):
|
||||||
"""The controller's main function. Depending on what type of view is
|
"""The controller's main function. Depending on what type of view is
|
||||||
selected, a different event loop is setup. Do note that the ConsoleView
|
selected, a different event loop is setup. Do note that the ConsoleView
|
||||||
is not a real event loop, just a basic flow of action."""
|
is not a real event loop, just a basic flow of action."""
|
||||||
if self.view is ConsoleView:
|
if self.view is ConsoleView:
|
||||||
self.view = self.view()
|
self.view = self.view()
|
||||||
self._run_console_view()
|
self._run_console_view()
|
||||||
elif self.view is WxView:
|
elif self.view is TkinterView:
|
||||||
app = wx.App()
|
root = Tk()
|
||||||
|
root.title("Task Manager")
|
||||||
|
root.geometry("500x300")
|
||||||
self.view = self.view()
|
self.view = self.view()
|
||||||
self.view._set_controller(self)
|
self.view._set_controller(self)
|
||||||
app.MainLoop()
|
root.mainloop()
|
||||||
|
|
||||||
def get_task_from_model(self, idx):
|
def get_task_from_model(self, idx):
|
||||||
"""Needed for the WxView to communicate with the controller."""
|
"""Needed for the TkinterView to communicate with the controller."""
|
||||||
task = self.model.get_task(idx)
|
task = self.model.get_task(idx)
|
||||||
self.view.show_task(task)
|
self.view.show_task(task)
|
||||||
|
|
||||||
|
@ -3173,9 +3181,10 @@ class Controller(object):
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
view = WxView
|
view = TkinterView
|
||||||
app = Controller(view)
|
app = Controller(view)
|
||||||
app.run()
|
app.run()
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
For a GUI only login generator an implementation without MVC could look a bit like this.
|
For a GUI only login generator an implementation without MVC could look a bit like this.
|
||||||
|
|
Loading…
Reference in New Issue