En esta breve entrada vamos a hablar de cómo utilizar la función ìmg2py de wxPython, para generar códigos a partir de imágenes, y posteriormente poder utilizarlas en conjunto conPyEmbeddedImage.



Lo primero que debemos hacer es importar la función del módulo wx.tools.img2py:

from wx.tools.img2py import img2py

Y posteriormente sólo llamaremos a la función pasando como argumentos el archivo de la imagen y el archivo Python de salida, por ejemplo:

img2py("icono.png", "icono.py")

Con lo anterior se obtendrá un archivo Python icono.py que contiene algo parecido a lo siguiente:

#----------------------------------------------------------------------
# This file was generated by C:\Users\User\Desktop\LABPro\_blogs_\Posts\test_app.py
#
from wx.lib.embeddedimage import PyEmbeddedImage

icono = PyEmbeddedImage(
"iVBORw0KGgoAAAANSUhEUgAAAA0AAAANCAYAAABy6+R8AAAABHNCSVQICAgIfAhkiAAAAAlw"
"SFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoA"
"AABlSURBVCiRY2TAChryGBgYJmKXY2BgwiWBD7D819JqQxfMfHHXZMY7ZdyaGBgYKtEFNdk+"
"4bWJLOeR5ydsgtrsnxiSBe5hiG/9IrX2xR+OD4z/tbT+E20FI6M249Wr1+jnp0GuCQD2OxXd"
"g2khLwAAAABJRU5ErkJggg==")

Luego, ese código generado lo podremos utilizar posteriormente en nuestras aplicaciones, por ejemplo para un icono:

# -*- coding:utf-8 -*-
import wx
from icono import icono

if __name__=='__main__':
app = wx.App()
fr = wx.Frame(None, -1, u"wxPython")
fr.SetIcon(icono.GetIcon())
fr.Show()
app.MainLoop()

¿Y si necesito embeber varias imágenes en un mismo archivo Python?

Si, es bastante probable que necesite esto, hacer una colección de imagenes embebidas en un mismo archivo Python, la cuestión es muy parecida, sólo tenemos que agregar el keyword argumentappend a la función img2py para evitar que borre lo que se ha colocado anteriormente, un pequeño ejemplo:

import glob
from wx.tools.img2py import img2py

if __name__=='__main__':
for img in glob.glob("img/*.png"):
img2py(img,"iconos.py", append=True)

Lo anterior incrusta el código correspondiente a todas las imágenes PNG contenidas en la carpeta img/.