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