El día 28 de abril de 2011 14:27, Chema Cortes <pych...@gmail.com> escribió: > El día 28 de abril de 2011 02:21, lopz <lowlife...@gmail.com> escribió: > >> Podrías ponerme un ejemplo de como debería hacerlo? > > Me pones en un compromiso, ya que no uso ni gtk ni web2py. Para > implementar bien el patrón MVC se requieren otros patrones como > facade, observer, mediator,... que hace complicado cualquier ejemplo. > Es mejor que te mires algunos de los frameworks MVC que tienes > accesibles para gtk: > > pygtkMVC, un MVC básico para GTK: > http://sourceforge.net/apps/trac/pygtkmvc
Lo he descargado para ver como hace las cosas, pero si la idea es usarlo no creo que valga la pena para lo pequeño que es mi proyecto :( Además la idea es aprender a implementarlo :) > AVC (Aplication-View-Controller), una implementación MVC que conecta > automáticamente variables y señales para diversos GUIs: > http://avc.inrim.it > > PureMVC: un completo patrón MVC para python (y otros lenguajes) > http://trac.puremvc.org/PureMVC_Python > Estos dos los he visto superficialmente y me quedo con el primero por ser más pequeño >> Dice que la vista no puede dar órdenes, pero al momento de iniciar el >> modem por ej >> cómo sería la cosa? >> Como debo hacer para que al presionar un botón se inicie los 2 servicios? >> Ya con esto de idea podré hacer el resto > > Intentaré darte una visión global: > > La clase ControlService es en realidad una vista, que instanciaría en > el controlador. Así mismo, también la clase ControlData sería una > vista, aunque movería la parte de actualización de datos al > controlador para mejorar el desacople. Entonces la idea es pasar todo el objeto de la vista al controlador y que este se encarge de osar los métodos del modelo y actualizar la vista? En mi caso, pasar todo el objeto Menu() y el objeto ControlService (que lo renombraré) al controlador y que este inicie y pare el modem, osea ahí en el controlador realizar el .connect (las señales) de los widgets? > Para establecer una comunicación entre vista y controlador, puede que > lo más fácil de ver sea a través de una cola de eventos. Para ello el > módulo 'queue' de python suele ayudar. Creas una queue donde las > vistas escriban y sólo el controlador lea y borre. En esta queue > (FIFO) van entrando los eventos, simples objetos con dos atributos, > uno de tipo de evento y otro con el mensaje. Pero la queue dónde la crearía? dónde la instanciaría? para esto me imagino que tengo que crear una clase que meneje la queue :S > En el caso de pulsar el botón de inicio del módem: la vista mete en la > queue un evento de tipo "INIT_MODEM" (por ejemplo). El controlador, > que va revisando la pila, lee el evento y decide actuar: puede > arrancar los dos servicios del modem,...o lanzar un error, o no hacer > nada (que para eso es el que manda). Cómo revisa el controlador la cola? en algún thread aparte un while? El controlador, después de > procesar el evento y eliminarlo de la pila, manda mensajes de > actualización a las vistas, y sigue con el siguente evento. Los > mensajes enviados pueden ser simples llamadas a los métodos de las > vistas o, Entiendo todo lo anterior como funciona, desde la vista al pulsar un botón por ej se llena la cola, añado un objeto que lo procesará el controlador y actuará dependiendo del evento, pero no sé como implementarlo, ahí mi problema :s para hacerlo más genérico, se podría implementar algún > patrón "observer" que posibilite la actualización conjunta de varios > elementos gráficos a la vez (algo que en gtk se hace normalmente con > "señales"). Estaba viendo esto y parece ser lo mejor, pero lo más complicado para implementar al menos para mí > > Ya perdonarás que no ponga código, pero no tengo nada con qué > ilustrarte. Aún así, espero que te haya aclarado algo. > _______________________________________________ > Python-es mailing list > Python-es@python.org > http://mail.python.org/mailman/listinfo/python-es > FAQ: http://python-es-faq.wikidot.com/ > -- lopz es libre, usa --> GNU/linux gentoo +--[RSA 2048]--+ | ..o.o=+ | | o =o*.+ | | . . *oO . | | .EBoo | | o.S | +--[lopz.org]--+ _______________________________________________ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/