Hola a todos!
Estoy aprendiendo a programar con este patrón de diseño, Modelo Vista Controlador (MVC), y para ello estoy intentando hacer una aplicación de escritorio muy sencilla para ver cómo funciona. La idea es hacer un programa cuya interfaz tiene un cuadro de texto para ingresar un dni, un botón que llama a la función de calcular la letra que el corresponde y la muestre en una etiqueta.
Si no he entendido mal, según este patrón de diseño (MVC), tengo que separar en 3 bloques el programa, de modo que un bloque es la parte gráfica (vista), otro bloque sería la parte que llevará las clases y funciones que voy a utilizar para hacer cálculos y esas cosas (modulo) y por último lo que entiendo que sería el programa principal que es el que servirá de enlace entre ambas (controlador), y que, supongo que por lo tanto importará lo ficheros .py de los otros 2 bloques. Bueno, al menos esto es lo que yo he entendido mirando por google, foros y demás.
Bien, estoy utilizando eclipse con pydev y wxpython sobre Ubuntu para desarrollar el programa, y para hacer la interfaz gráfica utilizo el wxglade.
La idea que tenía en la cabeza de cómo debería hacer el programa es la siguiente:
1º Hago la interfaz de usuario con el wxglade, que es una ventana con un cuadro de texto, un botón y una etiqueta. El wxglade ya me genera el fichero .py con el código que funciona perfectamente a la hora de ejecutarlo con el eclipse, así que creo que ya doy por concluida la parte gráfica o vista del programa.
2º Creo otro fichero .py con el eclipse que únicamente tiene una función que recibe una cadena (el dni), calcula la letra que le corresponde, y la devuelve.
3º Programa principal o controlador. Aquí es donde tengo el problema. Por lo que tengo entendido tengo que capturar el evento de que se pulse el botón, pero por más que lo intento no sé como hacerlo. En todos los ejemplos que visto, siempre se añade al código de la interfaz (vista) una línea como la siguiente:
self.button_calcular_letra.Bind(wx.EVT_BUTTON, funcion_metodo_a_ejecutar)
El caso, es que lo que yo quiero es no tener que tocar para nada el código de la interfaz, y que sea el controlador o programa principal el que capture dicho evento, para dejar el código de la vista "limpio", por así decirlo, pero me da errores del tipo se ha borrado el objeto, o los atributos de éste, o bien que no está definido dicho objeto.
¿Alguien sabe cómo debería hacer? Por lo que he visto por ahí, creo que la solución es algo que llaman observer, pero por lo que vi, me parece que también tendría que añadir líneas de código al código de la interfaz, cosa que no me interesa, a no ser que no halla más remedio y no sea demasiado código el que tenga que añadir.
Muchísimas gracias por vuestra atención.