在Python中使用Win32创建内存图标

1 投票
3 回答
1507 浏览
提问于 2025-04-11 09:34

在Python中,有什么好的方法可以在内存中生成一个图标吗?现在我只能使用pygame来绘制图标,然后把它保存为一个.ico文件,再从磁盘加载这个.ico文件作为图标资源……

大概是这样的:

    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)

……这里的self.icon是我创建的图标的文件名。

有没有办法在内存中做到这一点?编辑一下:我想做的就是创建一个图标,上面显示一个两位数的数字(像天气或任务栏那种样式)。

3 个回答

0

这个对我来说是有效的,而且不需要用到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)
0

你可以创建一个对象,让它的行为像Python中的文件对象那样。

http://docs.python.org/library/stdtypes.html#bltin-file-objects

3

你可以使用 wxPython 来实现这个功能。

from wx import EmptyIcon
icon = EmptyIcon()
icon.CopyFromBitmap(your_wxBitmap)

wxBitmap 可以通过 wxMemoryDC 在内存中生成,想了解你可以在DC上做哪些操作,可以查看 这里

然后这个图标可以应用到一个 wxFrame(窗口)或者 wxTaskBarIcon 上,使用:

frame.SetIcon(icon)

撰写回答