MVC Help

Sbaush sbaush at gmail.com
Tue Jan 17 14:23:46 CET 2006


Thanks!!
Is there a wx example?


2006/1/17, Fredrik Lundh <fredrik at pythonware.com>:
>
> "Sbaush" <sbaush at gmail.com> wrote:
>
> > The View must be only the clickable button
> > The Control must be the event listener on the button
> > The Model must be the action of the button.
>
> > If we can complete this MVC simple implementation we could publish this
> like
> > a "MVC SIMPLE TUTORIAL" because with only a button this could explain
> the
> > MVC Observer based Architecture.
>
> if you think that an "action" is a good model, you've probably already
> lost track
> of what MVC really is.
>
> if you want something simple, I suggest using a simple model that's
> updated by
> a simple user action.  here's a straightforward WCK example, which uses a
> click
> counter as the model.  note that the test script creates a single model
> instance,
> and displays it in multiple views.
>
> from WCK import Widget, Controller, Observable
> from WCK import FOREGROUND, FONT # platform default
>
> class MyModel(Observable):
>
>     count = 0
>
>     def increment(self):
>         self.count += 1
>         self.notify(None) # notify observers
>
> class MyController(Controller):
>
>     def create(self, handle):
>         handle("<ButtonRelease-1>", self.handle_button_release_1)
>
>     def handle_button_release_1(self, event):
>         # update the model
>         model = event.widget.model
>         if model:
>             model.increment()
>
> class MyView(Widget):
>
>     model = None
>     ui_controller = MyController
>
>     def _notify(self, event, data):
>         # called by the model via the observable mixin
>         self.ui_damage() # update myself
>
>     def setmodel(self, model):
>         # install new model
>         assert isinstance(model, Observable)
>         if self.model:
>             self.model.removeobserver(self._notify)
>         self.model = model
>         self.model.addobserver(self._notify)
>
>     def ui_handle_repair(self, draw, x0, y0, x1, y1):
>         # repair widget contents
>         if not self.model:
>             return
>         font = self.ui_font(FOREGROUND, FONT)
>         text = str(self.model.count)
>         draw.text((10, 10), text, font)
>
>     def ui_handle_destroy(self):
>         # cleanup (called when the widget is destroyed)
>         if self.model:
>             self.model.removeobserver(self._notify)
>
> if __name__ == "__main__":
>     # try it out
>
>     from Tkinter import Tk
>
>     root = Tk()
>
>     model = MyModel()
>
>     view = MyView(root, background="light blue")
>     view.pack(side="left")
>
>     view.setmodel(model)
>
>     another_view = MyView(root, background="light yellow")
>     another_view.pack(side="left")
>
>     another_view.setmodel(model) # shares the same model!
>
>     if 0:
>         # enable this to illustrate external updates to the model
>         def tick():
>             model.increment()
>             root.after(1000, tick)
>         tick() # start ticking
>
>     root.mainloop()
>
> </F>
>
>
>
> --
> http://mail.python.org/mailman/listinfo/python-list
>



--
Sbaush
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-list/attachments/20060117/e13f42b4/attachment.html>


More information about the Python-list mailing list