Esta entrega no será para hacer modificaciones en nuestra aplicación, sino, tan solo para concentrar todo el código visto hasta ahora en un solo post, de manera que puedan ver mejor el contenido de cada archivo que compone nuestro proyecto.
controladorEditorDePelicula.py
from vistas.vistaEditorDePelicula import VistaEditorDePelicula
from wx.lib.pubsub import Publisher
import wx
from wx import xrc
import pelicula
class ControladorEditorDePelicula:
def __init__(self, app, parent, agregar=True):
self.app = app
self.vistaPrincipal = parent
self.vista = VistaEditorDePelicula(self.vistaPrincipal.frame, self.app, agregar)
Publisher.subscribe(self.onSeCambioItemSeleccionado, 'cambio_item_seleccionado')
btnAgregarPelicula = xrc.XRCCTRL(self.vista.Dialog, 'btnAceptar')
self.vista.Dialog.Bind(wx.EVT_CLOSE, self.onCerrarEditorDePelicula, self.vista.Dialog)
if(agregar):
self.vista.Dialog.Bind(wx.EVT_BUTTON, self.onAgregarPelicula, btnAgregarPelicula)
else:
self.vistaPrincipal.habilitarEdicion(False)
self.vista.Dialog.Bind(wx.EVT_BUTTON, self.onModificarPelicula, btnAgregarPelicula)
self.cargarPeliculaSeleccionadaEnVistaPrincipal()
btnPeliculaAnterior = xrc.XRCCTRL(self.vista.Dialog, 'm_bpButton2')
btnPeliculaSiguiente = xrc.XRCCTRL(self.vista.Dialog, 'm_bpButton3')
btnPrimeraPelicula = xrc.XRCCTRL(self.vista.Dialog, 'm_bpButton1')
btnUltimaPelicula = xrc.XRCCTRL(self.vista.Dialog, 'm_bpButton4')
self.vista.Dialog.Bind(wx.EVT_BUTTON, self.onCargarPeliculaAnterior, btnPeliculaAnterior)
self.vista.Dialog.Bind(wx.EVT_BUTTON, self.onCargarSiguientePelicula, btnPeliculaSiguiente)
self.vista.Dialog.Bind(wx.EVT_BUTTON, self.onCargarPrimeraPelicula, btnPrimeraPelicula)
self.vista.Dialog.Bind(wx.EVT_BUTTON, self.onCargarUltimaPelicula, btnUltimaPelicula)
self.vista.Mostrar(agregar)
def onAgregarPelicula(self, evt):
infoPelicula = self.vista.getInfoPelicula()
self.app.modelo.agregarPelicula(infoPelicula.getTitulo(), infoPelicula.getAnio())
self.vistaPrincipal.seleccionarPrimeraPelicula()
def onModificarPelicula(self, evt):
infoPelicula = self.vista.getInfoPelicula()
self.app.modelo.modificarPelicula(self.idPelicula, infoPelicula.getTitulo(), infoPelicula.getAnio())
def onCargarSiguientePelicula(self, evt):
self.vistaPrincipal.seleccionarSiguientePelicula()
def onCargarPeliculaAnterior(self, evt):
self.vistaPrincipal.seleccionarAnteriorPelicula()
def onCargarPrimeraPelicula(self, evt):
self.vistaPrincipal.seleccionarPrimeraPelicula()
def onCargarUltimaPelicula(self, evt):
self.vistaPrincipal.seleccionarUltimaPelicula()
def onSeCambioItemSeleccionado(self, evt):
self.cargarPeliculaSeleccionadaEnVistaPrincipal()
def cargarPeliculaSeleccionadaEnVistaPrincipal(self):
self.idPelicula = self.app.controladorVistaPrincipal.vista.getIDItemSeleccionado()
self.vista.cargarPelicula(self.idPelicula)
def onCerrarEditorDePelicula(self, evt):
self.vistaPrincipal.habilitarEdicion(True)
Publisher.unsubscribe(self.onSeCambioItemSeleccionado, 'cambio_item_seleccionado')
self.vista.Dialog.Destroy()
controladorVistaPrincipal.py
import wx
from wx import xrc
from wx.lib.pubsub import Publisher
from vistas.vistaPrincipal import VistaPrincipal
from controladores.controladorEditorDePelicula import ControladorEditorDePelicula
class ControladorVistaPrincipal:
def __init__(self, app):
self.app = app
self.vista = VistaPrincipal(app)
self.vista.frame.Bind(wx.EVT_MENU, self.onMostrarAgregarPelicula, id=xrc.XRCID('itemAgregarPelicula'))
self.vista.frame.Bind(wx.EVT_MENU, self.onMostrarEditorDePelicula, id=xrc.XRCID('itemEditarPelicula'))
self.vista.frame.Bind(wx.EVT_MENU, self.onEliminarPelicula, id=xrc.XRCID('itemEliminarPelicula'))
self.vista.frame.Bind(wx.EVT_MENU, self.onSalir, id=xrc.XRCID('itemSalir'))
self.vista.frame.Bind(wx.EVT_TOOL, self.onMostrarAgregarPelicula, id=xrc.XRCID('toolAgregarPelicula'))
self.vista.frame.Bind(wx.EVT_TOOL, self.onMostrarEditorDePelicula, id=xrc.XRCID('toolEditarPelicula'))
self.vista.frame.Bind(wx.EVT_TOOL, self.onEliminarPelicula, id=xrc.XRCID('toolEliminarPelicula'))
self.vista.frame.Bind(wx.EVT_TOOL, self.onBuscarPelicula, id=xrc.XRCID('toolBuscarPelicula'))
Publisher.subscribe(self.seModificoElModelo, 'pelicula_agregada')
Publisher.subscribe(self.seModificoElModelo, 'pelicula_modificada')
Publisher.subscribe(self.seModificoElModelo, 'pelicula_eliminada')
listadoPeliculas = xrc.XRCCTRL(self.vista.frame, 'listPeliculas')
self.vista.frame.Bind(wx.EVT_LIST_ITEM_SELECTED, self.onSeCambioItemSeleccionado, listadoPeliculas)
self.vista.cargarListaoDePeliculas()
self.vista.seleccionarPrimeraPelicula()
self.vista.Mostrar()
def onMostrarAgregarPelicula(self, evt):
self.editorDePeliculas = ControladorEditorDePelicula(self.app, self.vista, True)
def onMostrarEditorDePelicula(self, evt):
self.editorDePeliculas = ControladorEditorDePelicula(self.app, self.vista, False)
def onEliminarPelicula(self, evt):
id_pelicula = self.vista.getIDItemSeleccionado()
self.app.modelo.eliminarPelicula(id_pelicula)
wx.MessageBox("La pelicula se ha eliminado")
def onBuscarPelicula(self, evt):
wx.MessageBox("Buscar una pelicula")
def seModificoElModelo(self, mensaje):
self.vista.cargarListaoDePeliculas()
def onSalir(self, evt):
self.app.Exit()
def onSeCambioItemSeleccionado(self, evt):
Publisher.sendMessage("cambio_item_seleccionado", None)
vistaEditorDePelicula.py
import wx
from wx import xrc
import pelicula
class VistaEditorDePelicula:
def __init__(self, parent, app, agregar=True):
self.modelo = app.modelo
self.app = app
self.Dialog = self.app.res.LoadDialog(parent, 'DlgEditorPelicula')
btnAgregarPelicula = xrc.XRCCTRL(self.Dialog, 'btnAceptar')
if(agregar):
titulo_pelicula = xrc.XRCCTRL(self.Dialog, 'txtTitulo')
titulo_pelicula.SetFocus()
barraNavegacion = xrc.XRCCTRL(self.Dialog, 'm_panel2')
barraNavegacion.Show(False)
self.Dialog.Fit()
btnAgregarPelicula.SetLabel('Agregar')
else:
btnAgregarPelicula.SetLabel('Guardar')
def Mostrar(self, modal=True):
if modal:
self.Dialog.ShowModal()
else:
self.Dialog.Show()
def getInfoPelicula(self):
infoPelicula = pelicula.Pelicula()
titulo_pelicula = xrc.XRCCTRL(self.Dialog, 'txtTitulo')
anio_pelicula = xrc.XRCCTRL(self.Dialog, 'txtAnio')
infoPelicula.setTitulo(titulo_pelicula.GetValue())
infoPelicula.setAnio(anio_pelicula.GetValue())
return infoPelicula
def cargarPelicula(self, idPelicula):
infoPelicula = pelicula.Pelicula()
infoPelicula = self.modelo.obtenerInformacionDePelicula(idPelicula)
titulo_pelicula = xrc.XRCCTRL(self.Dialog, 'txtTitulo')
anio_pelicula = xrc.XRCCTRL(self.Dialog, 'txtAnio')
titulo_pelicula.SetValue(infoPelicula.getTitulo())
anio_pelicula.SetValue(infoPelicula.getAnio())
titulo_pelicula = xrc.XRCCTRL(self.Dialog, 'txtTitulo')
titulo_pelicula.SetFocus()
vistaPrincipal.py
import wx
from wx import xrc
class VistaPrincipal:
def __init__(self, app):
self.app = app
self.res = self.app.res
self.frame = self.res.LoadFrame(None, 'FramePrincipal')
def Mostrar(self):
self.frame.Show()
def cargarListaoDePeliculas(self):
self.listaDePeliculas = xrc.XRCCTRL(self.frame, 'listPeliculas')
self.listaDePeliculas.SetSingleStyle(wx.LC_REPORT, True)
self.listaDePeliculas.InsertColumn(0, 'Titulo', format=wx.LIST_FORMAT_LEFT, width=-1)
self.listaDePeliculas.InsertColumn(1, 'Anio', format=wx.LIST_FORMAT_LEFT, width=-1)
peliculas = self.app.modelo.ObtenerListadoDePeliculas()
index = 0
for pelicula in peliculas:
item = self.listaDePeliculas.InsertStringItem (index, str(pelicula[1]))
self.listaDePeliculas.SetItemData(item, pelicula[0])
self.listaDePeliculas.SetStringItem(index, 1, str(pelicula[2]))
index+=1
self.listaDePeliculas.SetColumnWidth(0, wx.LIST_AUTOSIZE)
self.listaDePeliculas.SetColumnWidth(1, wx.LIST_AUTOSIZE)
def getIDItemSeleccionado(self):
itemIndex = self.listaDePeliculas.GetFirstSelected()
return self.listaDePeliculas.GetItemData(itemIndex)
def seleccionarItem(self, indiceItem):
self.listaDePeliculas = xrc.XRCCTRL(self.frame, 'listPeliculas')
itemActual = self.listaDePeliculas.GetFirstSelected()
self.listaDePeliculas.Select(itemActual, False)
self.listaDePeliculas.Select(indiceItem, True)
self.listaDePeliculas.Focus(indiceItem)
def seleccionarPrimeraPelicula(self):
self.seleccionarItem(0)
def seleccionarUltimaPelicula(self):
self.listaDePeliculas = xrc.XRCCTRL(self.frame, 'listPeliculas')
indiceUltimoItem = self.listaDePeliculas.GetItemCount() - 1
self.seleccionarItem(indiceUltimoItem)
def seleccionarSiguientePelicula(self):
self.listaDePeliculas = xrc.XRCCTRL(self.frame, 'listPeliculas')
itemActual = self.listaDePeliculas.GetFirstSelected()
indiceUltimoItem = self.listaDePeliculas.GetItemCount() - 1
if(itemActual < indiceUltimoItem ):
self.seleccionarItem(itemActual + 1)
def habilitarEdicion(self, habilitado=True):
barra_de_herramientas = self.frame.GetToolBar()
barra_de_herramientas.Enable(habilitado)
menu_catalogo = self.frame.GetMenuBar()
menu_catalogo.EnableTop(0, habilitado)
modelo.py
from wx.lib.pubsub import Publisher
import MySQLdb
import pelicula
class Model:
def conectar(self):
self.cnn = MySQLdb.connect(host='localhost', user='user', passwd='password', db='catalogo_peliculas_db')
self.cursor = self.cnn.cursor()
def desconectar(self):
self.cnn.close()
self.cursor.close()
def agregarPelicula(self, titulo_pelicula, anio):
self.conectar()
self.cursor.execute("INSERT INTO tblPeliculas(TituloPelicula, Anio) VALUES('" + titulo_pelicula + "'," + anio + ")")
self.desconectar()
Publisher.sendMessage("pelicula_agregada", None)
def modificarPelicula(self, id_pelicula, titulo_pelicula, anio):
self.conectar()
self.cursor.execute("UPDATE tblPeliculas SET TituloPelicula='" + titulo_pelicula + "', Anio=" + str(anio) + " WHERE IDPelicula=" + str(id_pelicula))
self.desconectar()
Publisher.sendMessage("pelicula_modificada", None)
def eliminarPelicula(self, id_pelicula):
self.conectar()
self.cursor.execute("DELETE FROM tblPeliculas WHERE IDPelicula=" + str(id_pelicula))
self.desconectar()
Publisher.sendMessage("pelicula_eliminada", None)
def ObtenerListadoDePeliculas(self):
self.conectar()
self.cursor.execute("SELECT * FROM tblPeliculas ORDER BY TituloPelicula")
listado = self.cursor.fetchall()
self.desconectar()
return listado
def obtenerInformacionDePelicula(self, idPelicula):
self.conectar()
self.cursor.execute("SELECT * FROM tblPeliculas WHERE IDPelicula = " + str(idPelicula))
resultado = self.cursor.fetchone()
infoPelicula = pelicula.Pelicula()
infoPelicula.setTitulo(str(resultado[1]))
infoPelicula.setAnio(str(resultado[2]))
self.desconectar()
return infoPelicula
catalogo.py
import wx
from wx import xrc
from controladores.controladorVistaPrincipal import ControladorVistaPrincipal
from modelo import Model
class CatalogoDePeliculas(wx.App):
def OnInit(self):
self.modelo = Model()
self.res = xrc.XmlResource('gui2.xrc')
self.controladorVistaPrincipal = ControladorVistaPrincipal(self)
return True
app = CatalogoDePeliculas()
app.MainLoop()
pelicula.py
class Pelicula:Este es todo el código de nuestro Catalogo hasta aquí. En la próxima parte, trabajaremos en la implementación de la búsqueda de películas.
def __init__(self):
self.titulo = ""
self.anio = ""
def setTitulo(self, titulo):
self.titulo = titulo
def getTitulo(self):
return self.titulo
def setAnio(self, anio):
self.anio = anio
def getAnio(self):
return self.anio
Saludos!
0 comments
Publicar un comentario