Foros del Web » Programando para Internet » Python »

wxPython - Duda sobre como "ensamblar" paneles

Estas en el tema de wxPython - Duda sobre como "ensamblar" paneles en el foro de Python en Foros del Web. Sigo procurando aplicar el concepto MVC tal como me recomendaron. Si en mi archivo views tengo algo del estilo: Código: class MyFrame(wx.Frame): def __init__(self, *args, ...
  #1 (permalink)  
Antiguo 13/01/2013, 06:28
 
Fecha de Ingreso: noviembre-2012
Mensajes: 111
Antigüedad: 12 años, 1 mes
Puntos: 6
wxPython - Duda sobre como "ensamblar" paneles

Sigo procurando aplicar el concepto MVC tal como me recomendaron.

Si en mi archivo views tengo algo del estilo:

Código:
class MyFrame(wx.Frame):
    def __init__(self, *args, **kwds):

   
        kwds["style"] = wx.CAPTION | wx.MINIMIZE_BOX | wx.MAXIMIZE | wx.MAXIMIZE_BOX | wx.SYSTEM_MENU | wx.RESIZE_BORDER | wx.CLIP_CHILDREN | wx.CLOSE_BOX
        wx.Frame.__init__(self, None, wx.ID_ANY)
        
        self.panel_usuario = wx.Panel(self, -1)
        self.static_box_1 = wx.StaticBox(self.panel_usuario, -1, "PANEL USUARIO")
a los solos efectos de haber inicializado el panel que se activará con cada botón de la barra de herramientas...

cuando finalmente tengo ya creado el código que preciso que se ejecute dentro de cada panel, o sea, cajas de texto, botones, etc...

ese código lo "embuto" dentro del propio views? o se coloca como un módulo aparte?

no se si me explico, yo para ir desarrollando por etapas lo que quiero que haga el panel USUARIO lo desarrollo como un módulo independiente porque me queda más fácil aislar el problema y trabajar solo en eso pero una vez terminado el código, qué tipo de ensamble se acostumbra hacer?

una llamada a un módulo externo o integrar todo en el class MyFrame(wx.Frame): ?
  #2 (permalink)  
Antiguo 13/01/2013, 23:29
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 9 meses
Puntos: 1360
Respuesta: wxPython - Duda sobre como "ensamblar" paneles

Como puedes ver en este ejemplo.

Haces lo siguiente:
1.- Defines los modelos: En este paso pones toda la logica de negocio. Y ademas envías señales vía Publisher (ver patrón Observer)
2.- Defines las vistas: Tus clases Frame, Panel, etc... (Aquí no haces ningún bind)
3.- Defines los controladores: Aquí es donde haces las siguientes acciones: (Instancias donde sea necesario las vistas y los modelos, haces el bind de las vistas y ademas te puedes subscribir funciones a ciertos eventos que sean disparados por los modelos para que actualicen los valores en pantalla).
  #3 (permalink)  
Antiguo 14/01/2013, 10:48
 
Fecha de Ingreso: noviembre-2012
Mensajes: 111
Antigüedad: 12 años, 1 mes
Puntos: 6
Respuesta: wxPython - Duda sobre como "ensamblar" paneles

Cita:
Iniciado por razpeitia Ver Mensaje
Como puedes ver en este ejemplo.

Haces lo siguiente:
1.- Defines los modelos: En este paso pones toda la logica de negocio. Y ademas envías señales vía Publisher (ver patrón Observer)
2.- Defines las vistas: Tus clases Frame, Panel, etc... (Aquí no haces ningún bind)
3.- Defines los controladores: Aquí es donde haces las siguientes acciones: (Instancias donde sea necesario las vistas y los modelos, haces el bind de las vistas y ademas te puedes subscribir funciones a ciertos eventos que sean disparados por los modelos para que actualicen los valores en pantalla).

Muy buena información, voy a estudiarla e investigar a ver si lo puedo implementar. Muchas gracias porque este tipo de info me (nos) ahorra mucho tiempo de investigar por cuenta propia y al mismo tiempo nos permite ser nosotros quienes encontremos la solución.
  #4 (permalink)  
Antiguo 11/02/2013, 14:28
 
Fecha de Ingreso: noviembre-2012
Mensajes: 111
Antigüedad: 12 años, 1 mes
Puntos: 6
Respuesta: wxPython - Duda sobre como "ensamblar" paneles

Ya con MVC tengo lío y encima me entero que también existe MVP

http://wiki.wxpython.org/ModelViewPresenter
  #5 (permalink)  
Antiguo 11/02/2013, 14:47
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 9 meses
Puntos: 1360
Respuesta: wxPython - Duda sobre como "ensamblar" paneles

Si existen otros patrones como MVP o MVVM que asegura ser una sobre MVC pero la verdad es que no resuelve muchas dudas, como comunicación entre presenters.

En tu caso y como veo que estas empezando creo que lo mejor seria iterar.

Programar como sea que funcione y después mejorarlo para ir separando las partes.
  #6 (permalink)  
Antiguo 11/02/2013, 21:11
 
Fecha de Ingreso: noviembre-2012
Mensajes: 111
Antigüedad: 12 años, 1 mes
Puntos: 6
Respuesta: wxPython - Duda sobre como "ensamblar" paneles

Cita:
Iniciado por razpeitia Ver Mensaje
Si existen otros patrones como MVP o MVVM que asegura ser una sobre MVC pero la verdad es que no resuelve muchas dudas, como comunicación entre presenters.

En tu caso y como veo que estas empezando creo que lo mejor seria iterar.

Programar como sea que funcione y después mejorarlo para ir separando las partes.
Muy sano tu consejo, voy a hacer eso, trabajar aunque sea por módulos independientes, que cada módulo haga una tarea por completo y más adelante veré como los voy mejorando y si puedo llegar a MVC
  #7 (permalink)  
Antiguo 13/02/2013, 05:14
 
Fecha de Ingreso: noviembre-2012
Mensajes: 111
Antigüedad: 12 años, 1 mes
Puntos: 6
Respuesta: wxPython - Duda sobre como "ensamblar" paneles

En el código que tú resolviste:

Código Python:
Ver original
  1. class RadioButtonFrame(wx.Frame):
  2.     def __init__(self):
  3.         wx.Frame.__init__(self, None, -1, 'User Admin', size=(200, 200))
  4.  
  5.         self.Bind(wx.EVT_CLOSE, self.OnClose)
  6.        
  7.         panel = wx.Panel(self, -1)
  8.         self.widgets = []
  9.         self.users = get_users()
  10.         for i, user in enumerate(self.users):
  11.             radio = wx.RadioButton(panel, -1, label=str(i+1), pos=(20, 50+(i*30)))
  12.             text = wx.TextCtrl(panel, -1, user.name, pos=(80, 50+(i*30)))
  13.             text.Enable(False)
  14.  
  15.             if user.is_active():
  16.                 radio.SetValue(True)
  17.                 text.Enable(True)
  18.  
  19.             def OnButton(event, radio_index=i):
  20.                 self.OnRadio(event, radio_index)
  21.             radio.Bind(wx.EVT_RADIOBUTTON, OnButton)
  22.  
  23.             widget = {'radio': radio, 'text': text}
  24.             self.widgets.append(widget)
  25.  
  26.     def OnRadio(self, event, index):
  27.         for widget in self.widgets:
  28.             widget['text'].Enable(False)
  29.         widget = self.widgets[index]
  30.         widget['text'].Enable(True)
  31.  
  32.     def OnClose(self, event):
  33.         dlg = wx.MessageDialog(self, "Guardar los cambios realizados?",  "Confirmar Salida", wx.OK|wx.CANCEL|wx.ICON_QUESTION)
  34.         result = dlg.ShowModal()
  35.         dlg.Destroy()
  36.         if result == wx.ID_OK:
  37.             for user, widget in zip(self.users, self.widgets):
  38.                 user.set_active(widget['radio'].GetValue())
  39.                 user.name = widget['text'].GetValue()
  40.             save_users(self.users)
  41.         self.Destroy()

La duda que tengo es que esa clase incluye partes que podrían pertenecer a "CONTROLADOR" (def OnRadio y def OnClose) y otras que podrían pertenecer a "VISTAS" (def __init__)

En ese caso me complica un poco más como separarlas para que estén en sus respectivas áreas.

Incluyo el def __init__ en VISTAS y luego en CONTROLERS extiendo la clase para incluir def OnRadio y def OnClose?
  #8 (permalink)  
Antiguo 13/02/2013, 10:43
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 9 meses
Puntos: 1360
Respuesta: wxPython - Duda sobre como "ensamblar" paneles

No se si lo notaste, pero el código que puse es el tuyo, pero modificado ligeramente para que funcione.

Si planear ir con el patrón MVC entonces te recomiendo hacer lo siguiente:

1.- Solamente hacer las vistas en uno o varios archivos, ya sean formularios, dialogos, etc... Incluso puedes usar wxglade.
2.- En los controladores puedes hacer el bind de las vistas con los eventos. Y los eventos en si.
3.- Los modelos, son los modelos, puedes usar un ORM para esto.
  #9 (permalink)  
Antiguo 13/02/2013, 13:57
 
Fecha de Ingreso: noviembre-2012
Mensajes: 111
Antigüedad: 12 años, 1 mes
Puntos: 6
Respuesta: wxPython - Duda sobre como "ensamblar" paneles

Cita:
Iniciado por razpeitia Ver Mensaje
No se si lo notaste, pero el código que puse es el tuyo, pero modificado ligeramente para que funcione.

Si planear ir con el patrón MVC entonces te recomiendo hacer lo siguiente:

1.- Solamente hacer las vistas en uno o varios archivos, ya sean formularios, dialogos, etc... Incluso puedes usar wxglade.
2.- En los controladores puedes hacer el bind de las vistas con los eventos. Y los eventos en si.
3.- Los modelos, son los modelos, puedes usar un ORM para esto.
Si claro que lo noté, pero no me quise atribuir como tuyo el código que solucionó el problema

OK, voy a probar que sale.

1) Ese punto es el que me está complicando para ver como inserto en un panel un código que está resuelto como un Frame.

2) Ok

3) Me lo agendo como tema de estudio.

Etiquetas: mvc, wxpython
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:11.