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.

¿Fue útil?

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)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top