Nuevo en Python y patrón MVC

Alex Moreno alexmoreno en fastmail.fm
Sab Sep 25 11:25:23 CEST 2004


Me autorespondo :-):


##################

import wx

# an observable calls callback functions when the data has
# changed
#o = Observable()
#def func(data):
#    print "hello", data
#o.addCallback(func)
#o.set(1)
# --> "hello", 1

class Observable:
     def __init__(self, initialValue=None):
         self.data = initialValue
         self.callbacks = {}

     def addCallback(self, func):
         self.callbacks[func] = 1

     def delCallback(self, func):
         del self.callback[func]

     def _docallbacks(self):
         for func in self.callbacks:
             func(self.data)

     def set(self, data):
         self.data = data
         self._docallbacks()

     def get(self):
         return self.data

     def unset(self):
         self.data = None

class Model:
     def __init__(self):
         self.myMoney = Observable(0)

     def addMoney(self, value):
         self.myMoney.set(self.myMoney.get() + value)

     def removeMoney(self, value):
         self.myMoney.set(self.myMoney.get() - value)


class View(wx.Frame):
     def __init__(self, parent):
         wx.Frame.__init__(self, parent, -1, "Main View")
         sizer = wx.BoxSizer(wx.VERTICAL)
         text = wx.StaticText(self, -1, "My Money")
         ctrl = wx.TextCtrl(self, -1, "")
         sizer.Add(text, 0, wx.EXPAND|wx.ALL)
         sizer.Add(ctrl, 0, wx.EXPAND|wx.ALL)
         self.moneyCtrl = ctrl
         ctrl.SetEditable(False)
         self.SetSizer(sizer)
         self.moneyCtrl = ctrl

     def SetMoney(self, money):
         self.moneyCtrl.SetValue(str(money))

class ChangerWidget(wx.Frame):
     def __init__(self, parent):
         wx.Frame.__init__(self, parent, -1, "Main View")
         sizer = wx.BoxSizer(wx.VERTICAL)
         self.add = wx.Button(self, -1, "Add Money")
         self.remove = wx.Button(self, -1, "Remove Money")
         sizer.Add(self.add, 0, wx.EXPAND|wx.ALL)
         sizer.Add(self.remove, 0, wx.EXPAND|wx.ALL)
         self.SetSizer(sizer)

class Controller:
     def __init__(self, app):
         self.model = Model()
         self.view1 = View(None)
         self.view2 = ChangerWidget(self.view1)
         self.MoneyChanged(self.model.myMoney.get())
         self.view2.add.Bind(wx.EVT_BUTTON, self.AddMoney)
         self.view2.remove.Bind(wx.EVT_BUTTON, self.RemoveMoney)

         self.model.myMoney.addCallback(self.MoneyChanged)
         self.view1.Show()
         self.view2.Show()

     def AddMoney(self, evt):
         self.model.addMoney(10)

     def RemoveMoney(self, evt):
         self.model.removeMoney(10)

     def MoneyChanged(self, money):
         self.view1.SetMoney(money)


app = wx.PySimpleApp()
Controller(app)
app.MainLoop()


##################

On Fri, 24 Sep 2004 10:52:35 +0200, "Alex Moreno"
<alexmoreno en fastmail.fm> said:
> prueba con las wxWindows. Existen bindings para python, es
> multiplataforma y respeta el look-and-feel de la plataforma en la que se
> ejecuta.
> 
> Aprovecho para hacer una consulta sobre este tema. Yo también me estoy
> introduciendo en python y estoy empezando a tocar las wxWindows. El caso
> es que estoy tratando de realizar una implementación del patrón MVC para
> usar en proyectos más avanzados. No he encontrado nada (o muy poco)
> sobre esto y me gustaría conocer la opinión de alguien con algo más de
> experiencia en python. Cuál es la mejor forma de escribir GUI´s en
> python? Me refiero a la estructura, a la arquitectura para que a largo
> plazo el proyecto sea mantenible. Es una de las cosas por las que me
> gusta aplicar patrones y en especial el MVC para interfaces gráficas. O
> estoy en un error?
> 
> Gracias anticipadas, un saludo.
> 
> On Thu, 23 Sep 2004 21:20:02 -0500, "Nestor" <sertzen en gmail.com> said:
> > Hola Amigos,
> > Estoy entrando a este gran (por lo que he visto hasta ahora) mundo del
> > Python.
> > Me han pedido un desarrollo y querian que lo haga en vb. Obviamente
> > pense que con Python podia ser mas divertido y a la vez aprender un
> > nuevo lenguaje.
> > 
> > El problema es que no he encontrado documentacion para hacer las
> > ventanas. Y no solo es ese el problema, sino ademas que son ventanas
> > para MS windows....
> > 
> > Alguno sabe algo o tiene experiencia con eso? 
> > 
> > Saludos de Peru
> > 
> > Nestor
> -- 
>   Alex Moreno
> 
> 
> _______________________________________________
> Python-es mailing list
> Python-es en aditel.org
> http://listas.aditel.org/listinfo/python-es
-- 
  Alex Moreno





Más información sobre la lista de distribución Python-es