Imagenes y Mysql
Manuel Enrique González Ramírez
maengora en gmail.com
Mie Feb 6 04:37:17 CET 2008
Y para aquellos que como yo, todo un novato en el cuento de la programación
y de
Python han sufrido con lo de las imagenes y el MySQL les tengo una luz de
esperanza.
A todos aquellos que enviaron a la lista diferentes soluciones se los
agradezco mucho,
sin embargo (y sin el ánimo de ofender) quizás no me supe explicar bien qué
era y
cómo era lo que necesitaba y aquí por medio de un ejemplo voy a tratar de
explicarlo:
***Para tener en cuenta: Utilizo python2.5, wx y VisualWx sobre win2 (sin
embargo me imagino
que debe funcionar lo mismo para el maravilloso Linux).
Esta es la situación:
- Tengo una base de datos denominada prueba y una tabla llamada
datos que cuenta con los campos documento, nombres, apellidos y foto.
- Un formulario con tres StaticText (txt_doc, txt_noms, txt_apes) y un
StaticBitmap (foto)
* Lo que quiero hacer es que al digitar el documento de identidad en el
formulario
si éste ya existe muestre los datos así como también la foto que corresponde
a
dicho documento de identidad.
-- Lo que hice:
Cree la base de datos con los campos antes mencionados teniendo en cuenta
que el campo
foto es texto y sólo me va a almacenar el nombre de la foto (que para mi
caso es el mismo que el doc
con la extensión png).
La foto se encuentra almacenada en una carpeta denominada prueba y la foto
tiene como nombre
el documento de identidad del individuo con las dimensiones a utilizar.
Creo el código y en el txt_doc en el evento EVT_KILL_FOCUS verifico si el
documento de identidad
existe así como el campo foto y hago que se muestre la información
incluyendo la foto.
EL CODIGO.....
**********MyFrame.py*************
# -*- coding: iso-8859-1 -*-
# Don't modify comment
import wx
#[inc]add your include files here
import Image
import MySQLdb as con
db = con.connect(host='localhost',user='root',passwd='12345678',db='prueba')
c = db.cursor()
#[inc]end your include
class MyFrame(wx.Frame):
def __init__(self,parent,id = -1,title='',pos = wx.Point(1,1),size =
wx.Size(495,245),style = wx.DEFAULT_FRAME_STYLE,name = 'frame'):
pre=wx.PreFrame()
self.OnPreCreate()
pre.Create(parent,id,title,pos,size,style,name)
self.PostCreate(pre)
self.initBefore()
self.VwXinit()
self.initAfter()
def __del__(self):
self.Ddel()
return
def VwXinit(self):
self.Show(False)
self.SetFont(wx.Font(12,74,90,90,0,"Tahoma"))
self.SetBackgroundColour(wx.SystemSettings.GetColour(
wx.SYS_COLOUR_INFOBK))
self.Bind(wx.EVT_ACTIVATE,self.MostrarFotografia)
self.st4c = wx.StaticText(self,-1,"",wx.Point(15,20),wx.Size(52,19),
wx.ST_NO_AUTORESIZE)
self.st4c.SetLabel("Cédula")
self.txt_doc = wx.TextCtrl(self,-1,"",wx.Point(85,15),wx.Size
(155,27))
self.st6c = wx.StaticText(self,-1,"",wx.Point(15,55),wx.Size(67,19),
wx.ST_NO_AUTORESIZE)
self.st6c.SetLabel("Nombres")
self.txt_noms = wx.TextCtrl(self,-1,"",wx.Point(85,50),wx.Size
(230,27))
self.st8c = wx.StaticText(self,-1,"",wx.Point(15,95),wx.Size(67,19),
wx.ST_NO_AUTORESIZE)
self.st8c.SetLabel("Apellidos")
self.txt_apes = wx.TextCtrl(self,-1,"",wx.Point(85,90),wx.Size
(230,27))
self.bt_guardar = wx.Button(self,-1,"",wx.Point(15,140),wx.Size
(85,40))
self.bt_guardar.SetLabel("Guardar")
self.Bind(wx.EVT_BUTTON,self.ver_ima,self.bt_guardar)
self.bt_buscar = wx.Button(self,-1,"",wx.Point(105,140),wx.Size
(95,40))
self.bt_buscar.SetLabel("Buscar")
self.bt_cerrar = wx.Button(self,-1,"",wx.Point(205,140),wx.Size
(90,40))
self.bt_cerrar.SetLabel("Cerrar")
self.Bind(wx.EVT_BUTTON,self.cerrar,self.bt_cerrar)
self.picture = wx.StaticBitmap(self,-1,wx.NullBitmap,wx.Point
(330,10),wx.Size(145,160),wx.SIMPLE_BORDER)
self.Refresh()
return
def VwXDelComp(self):
return
#[win]add your code here
def ver_ima(self,event): #init function
#[780]Code event VwX...Don't modify[780]#
#add your code here
#Tomo el valor del documento de identidad
doc = self.txt_doc.GetValue()
"""Hago la consulta que me recupera (si es que existe) el campo
denominado imagen con el documento de identidad""""
sql = c.execute('SELECT imagen FROM datos WHERE documento=%s',(doc))
res = c.fetchone()
#Aquí se puede colocar un condicional para verificar que res sea
<>None
self.picture.SetFocus()
"""A la dirección 'C:/prueba/' (que es donde tengo almacenadas las
fotos)
le agruego el nombre del archivo que es el resultado de la consulta
y que
esta almacenado en res[0]
self.picture.SetBitmap(wx.Bitmap('C:/prueba/'+str(res[0])))
"""Increiblemente si el campo y el archivo existen se muestra la
foto
El resto del código es carpinteria"""
return
def cerrar(self,event): #init function
#[ 93]Code event VwX...Don't modify[ 93]#
#add your code here
self.Close()
return #end function
def bt_cerrar_VwXEvOnButtonClick(self,event): #init function
#[ 45]Code event VwX...Don't modify[ 45]#
#add your code here
return #end function
def OnPreCreate(self):
#add your code here
return
def initBefore(self):
#add your code here
return
def initAfter(self):
#add your code here
self.Centre()
self.Show()
return
def Ddel(self): #init function
#[ f9]Code VwX...Don't modify[ f9]#
#add your code here
return #end function
#[win]end your code
**********App.py**********
# -*- coding: iso-8859-1 -*-
import wx
provider = wx.SimpleHelpProvider()
wx.HelpProvider_Set(provider)
import MyFrame
class App(wx.App):
def OnInit(self):
wx.InitAllImageHandlers()
self.main = MyFrame.MyFrame(None,-1,'')
self.main.Show()
self.SetTopWindow(self.main)
return 1
def main():
application = App(0)
application.MainLoop()
if __name__ == '__main__':
main()
Seguramente existiran muchas formas más elegantes de hacer esto, pero por
ahora y mientras aprendo
más de este maravilloso lenguaje lo seguiré haciendo así.
Si desean una copia del archivo con la base de datos me lo hacen saber.
Suerte y gracias a todos los que de una u otra forma me dieron luces sobre
lo que debía hacer
_______________________________________________
Lista de correo Python-es
http://listas.aditel.org/listinfo/python-es
FAQ: http://listas.aditel.org/faqpyes
Más información sobre la lista de distribución Python-es