MVC Help
Sbaush
sbaush at gmail.com
Tue Jan 17 08:23:46 EST 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