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