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 con
PyEmbeddedImage
.
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/
.