Crea un icono en la memoria con win32 en python
Pregunta
¿Cuál es una buena manera de generar un icono en memoria en Python? En este momento me veo forzado a usar pygame para dibujar el ícono, luego lo guardo en el disco como un archivo .ico, y luego lo cargo desde el disco como un recurso ICO ...
Algo como esto:
if os.path.isfile(self.icon):
icon_flags = win32con.LR_LOADFROMFILE | win32con.LR_DEFAULTSIZE
hicon = win32gui.LoadImage(hinst,
self.icon,
win32con.IMAGE_ICON,
0,
0,
icon_flags)
... donde self.icon es el nombre de archivo del icono que creé.
¿Hay alguna forma de hacer esto en la memoria? EDITAR: todo lo que quiero hacer es crear un icono con un número de 2 dígitos que se muestra en él (estilo de barra de tareas del clima.
Solución
Puede usar wxPython para esto.
from wx import EmptyIcon
icon = EmptyIcon()
icon.CopyFromBitmap(your_wxBitmap)
El wxBitmap se puede generar en la memoria usando wxMemoryDC , busque aquí para las operaciones que puede realizar en un DC.
Este icono se puede aplicar a un wxFrame (una ventana) o un wxTaskBarIcon usando:
frame.SetIcon(icon)
Otros consejos
Probablemente puedas crear un objeto que imite la interfaz de archivo-objeto de Python.
http://docs.python.org/library/stdtypes .html # bltin-file-objects
Esto está funcionando para mí y no requiere wx.
from ctypes import *
from ctypes.wintypes import *
CreateIconFromResourceEx = windll.user32.CreateIconFromResourceEx
size_x, size_y = 32, 32
LR_DEFAULTCOLOR = 0
with open("my32x32.png", "rb") as f:
png = f.read()
hicon = CreateIconFromResourceEx(png, len(png), 1, 0x30000, size_x, size_y, LR_DEFAULTCOLOR)