# La ageda de amalia es, como su nombre lo dice, una agenda con una
# base de datos, la cual podemos modificar, agregar, eliminar contactos
# y hasta inclusive enviar mails a contactos con cuenta de gmail.
# Para poder usar esta agenda podes bajarte todos sus módulos de:
# http://code.google.com/p/laagendadeamalia/source/browse/#svn/trunk
#!/usr/bin/env python
# -*- coding: utf8 -*-
import wx
import MySQLdb
import wx.lib.dialogs
class Splash():
# Esta funcion es la que muestra la imagen de comienzo
def __init__(self):
# Se carga en una variable la imagen del archivo.bmp
image = wx.Image('splash_1.bmp', wx.BITMAP_TYPE_BMP)
bmp = image.ConvertToBitmap()
wx.SplashScreen(bmp, wx.SPLASH_CENTRE_ON_SCREEN |
wx.SPLASH_TIMEOUT, 4000, None, -1)
wx.Yield()
class Principal(wx.Frame):
# Basicamente es la clase principal,
def __init__(self, *args, **kwds):
kwds["style"] = wx.DEFAULT_FRAME_STYLE
wx.Frame.__init__(self, *args, **kwds)
# En esta parte agregamos todo el manbrullo que significa la barra de herramientas
# Primero tenemos un tamaño que se usara en las imagenes
tsize = (25, 25)
# Generamos variables que seran imagenes de una libreria estandar de wxpython
busqueda_bmp = wx.ArtProvider.GetBitmap(wx.ART_FIND, wx.ART_TOOLBAR, tsize)
contactos_bmp = wx.ArtProvider.GetBitmap(wx.ART_FILE_OPEN, wx.ART_TOOLBAR, tsize)
editar_bmp = wx.ArtProvider.GetBitmap(wx.ART_CUT, wx.ART_TOOLBAR, tsize)
ingreso_bmp = wx.ArtProvider.GetBitmap(wx.ART_NEW, wx.ART_TOOLBAR, tsize)
licencia_bmp = wx.ArtProvider.GetBitmap(wx.ART_NORMAL_FILE, wx.ART_TOOLBAR, tsize)
autores_bmp = wx.ArtProvider.GetBitmap(wx.ART_INFORMATION, wx.ART_TOOLBAR, tsize)
salir_bmp = wx.ArtProvider.GetBitmap(wx.ART_QUIT, wx.ART_TOOLBAR, tsize)
eliminar_bmp = wx.ArtProvider.GetBitmap(wx.ART_CROSS_MARK, wx.ART_TOOLBAR, tsize)
# Creamos la barra de herramientas
toolbar = self.CreateToolBar()
# Y comenzamos a agregar las imagenes a la barra en si identificandolos con diferentes id
toolbar.AddLabelTool(wx.ID_FIND, 'Buscar', busqueda_bmp, shortHelp = 'Buscar', longHelp = 'Busqueda de contactos')
# Para cada elemento agregamos su accion
self.Bind(wx.EVT_TOOL, self.OnBuscar, id = wx.ID_FIND)
toolbar.AddLabelTool(wx.ID_OPEN, 'Contactos', contactos_bmp, shortHelp = 'Contactos', longHelp = 'Lista de contactos')
self.Bind(wx.EVT_TOOL, self.OnListar, id = wx.ID_OPEN)
toolbar.AddLabelTool(wx.ID_CUT, 'Editar', editar_bmp, shortHelp = 'Editar', longHelp = 'editar lista de contactos')
self.Bind(wx.EVT_TOOL, self.OnEditar, id = wx.ID_CUT)
toolbar.AddLabelTool(wx.ID_PASTE, 'Ingresar', ingreso_bmp, shortHelp = 'Ingreso', longHelp = 'Ingresar contactos')
self.Bind(wx.EVT_TOOL, self.OnIngreso, id = wx.ID_PASTE)
toolbar.AddLabelTool(wx.ID_DELETE, 'Ingresar', eliminar_bmp, shortHelp = 'Eliminar', longHelp = 'Elimina un contactos')
self.Bind(wx.EVT_TOOL, self.OnEliminar, id = wx.ID_DELETE)
# Agregamos un separador de elementos
toolbar.AddSeparator()
toolbar.AddLabelTool(wx.ID_COPY, 'Licencia', licencia_bmp, shortHelp = 'Licencia', longHelp = 'Licencia')
self.Bind(wx.EVT_TOOL, self.OnLicencia, id = wx.ID_COPY)
toolbar.AddLabelTool(wx.ID_HELP, 'Autores', autores_bmp, shortHelp = 'Autores', longHelp = 'Autores')
self.Bind(wx.EVT_TOOL, self.OnAutores, id = wx.ID_HELP)
toolbar.AddSeparator()
toolbar.AddLabelTool(wx.ID_EXIT, 'Salir', salir_bmp, shortHelp = 'Salir', longHelp = 'Salir de la aplicación')
self.Bind(wx.EVT_TOOL, self.OnSalir, id = wx.ID_EXIT)
toolbar.AddSeparator()
# Pedimos que se seteen los tamaños a las imagenes. Asi no se van de tamaño
toolbar.SetToolBitmapSize(tsize)
#############################################
# Lo de abajo es un menu que funciona, pero
# por el momento esta comentado por que ahora
# la idea es dejar que funciones el programa
# utilizando una barra de herramienta.
#############################################
# habilitamos un menu con varias opciones
#self.menubar = wx.MenuBar()
# Creamos los menues que utilizaremos
# habilitamos menu principal
#menuquehacemos = wx.Menu()
#menuacerca = wx.Menu()
#self.busqueda = wx.MenuItem(menuquehacemos, wx.NewId(), "&Busqueda", "Permite buscar un contacto")
#self.listar = wx.MenuItem(menuquehacemos, wx.NewId(), "&Contactos", "Nos muestra la lista de contactos")
#self.editar = wx.MenuItem(menuquehacemos, wx.NewId(),"&Editar","Nos permite editar un contacto")
#self.ingreso = wx.MenuItem(menuquehacemos, wx.NewId(), '&Ingreso', 'Ingresamos un nuevo contacto')
#self.salir = wx.MenuItem(menuquehacemos, wx.NewId(), "&Salir","Nos permite abandonar el programa")
#self.licencia = wx.MenuItem(menuacerca, wx.NewId(), "&Licencia","Te baraja la licencia")
#self.autores = wx.MenuItem(menuacerca, wx.NewId(), "&Autores","La locura detras del codigo")
# agregamos los elementos a los menues
#menuquehacemos.AppendItem(self.busqueda)
#menuquehacemos.AppendItem(self.listar)
#menuquehacemos.AppendItem(self.editar)
#menuquehacemos.AppendItem(self.ingreso)
#menuquehacemos.AppendItem(self.salir)
#menuacerca.AppendItem(self.autores)
#menuacerca.AppendItem(self.licencia)
#self.menubar.Append(menuquehacemos,"&Que hacemos?")
#self.menubar.Append(menuacerca,"&Acerca de..." )
# Ahora vienen los bind de las acciones
#self.Bind(wx.EVT_TOOL, self.OnSalir, busqueda_bmp)
#self.Bind(wx.EVT_MENU, self.OnEditar, self.editar)
#self.Bind(wx.EVT_MENU, self.OnIngreso, self.ingreso)
#self.Bind(wx.EVT_MENU, self.OnBuscar, self.busqueda)
#self.Bind(wx.EVT_MENU, self.OnLicencia, self.licencia)
#self.Bind(wx.EVT_MENU, self.OnAutores, self.autores)
#self.Bind(wx.EVT_MENU, self.OnListar, self.listar)
# agregamos la barra principal a la aplicacion
#self.SetMenuBar(self.menubar)
# agregamos una barra de estado que nos brinda ayuda sobre el menu
#############################################
self.statusbar = self.CreateStatusBar()
self.__set_properties()
def __set_properties(self):
# Aca tenemos las propiedades del titulo y el tamaño del menu
self.SetTitle("La Agenda de Amalia")
self.SetSize((350, 150))
# Ademas de la alineacion
self.CenterOnScreen()
def OnEliminar(self,event):
# Funcion que llama a otro .py
# Basicamente lo que se hace es cerrar la ventana activa
try:
self.Destroy()# que es lo que ocurre aca
finally:
# y luego llamar al .py necesario
import eliminar
ventana = eliminar.Eliminar(None, -1,"")
ventana.Show()
def OnSalir(self, event):
# Funcion para finalizar la aplicacion
self.Close()
def OnIngreso(self, event):
try:
self.Destroy()
finally:
import ingreso
ventana = ingreso.Ingreso(None, -1,"")
ventana.Show()
def OnBuscar(self, event):
try:
self.Destroy()
finally:
import busqueda
ventana = busqueda.Busqueda(None, -1,"")
ventana.Show()
def OnEditar(self,event):
try:
self.Destroy()
finally:
import busquedapamodificar
ventana = busquedapamodificar.BusquedaModificar(None, -1,"")
ventana.Show()
def OnLicencia(self, event):
# Aca mostramos una licencia guardada en un txt
licencia = open("licencia.txt", "r")
mensaje = licencia.read()
licencia.close()
dialogo = wx.lib.dialogs.ScrolledMessageDialog(self, mensaje, "Licencia")
dialogo.ShowModal()
def OnAutores(self, event):
ladri = open("ladri.txt","r")
mensaje = ladri.read()
ladri.close()
dialogo = wx.lib.dialogs.ScrolledMessageDialog(self, mensaje, "Autor")
dialogo.ShowModal()
def OnListar(self, event):
# Arrancamos la conexion a la base de datos
self.db=MySQLdb.connect(host='localhost',user='amalia',passwd='amalia',db='agenda')
# Creamos un cursor de la misma
cursor=self.db.cursor()
# Y ejecutamos una orden SQL que inserta los datos capturados desde los textctrl
cursor.execute('''SELECT * FROM contactos''')
cursors = cursor.fetchall()
# No nos olvidamos de cerrar el cursor
cursor.close()
self.resultados = [("%d, %s, %s,%s, %s, %s" % tuple(a)) for a in cursors]
# creamos un SingleChoiceDialog para traer el resultado de la busqueda
dlg = wx.SingleChoiceDialog(None,u"Contactos",u"Listado completo", self.resultados)
dlg.ShowModal()
dlg.Destroy()
if __name__ == "__main__":
app = wx.PySimpleApp(0)
wx.InitAllImageHandlers()
ventana = Principal(None, -1, "")
app.SetTopWindow(ventana)
splash = Splash()
ventana.Show()
app.MainLoop()
Deja un comentario