在python中使用win32在内存中创建一个图标

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在python中使用win32在内存中创建一个图标相关的知识,希望对你有一定的参考价值。

在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是我创建的图标的文件名。

在记忆中有没有办法做到这一点?编辑:我想要做的就是创建一个图标,上面显示一个2位数字(天气任务栏样式。

答案

你可以使用wxPython

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

可以使用wxBitmap在内存中生成wxMemoryDC,查看here,以便在DC上执行操作。

然后可以使用以下命令将此图标应用于wxFrame(窗口)或wxTaskBarIcon:

frame.SetIcon(icon)
另一答案

您可以创建一个模仿python文件 - 对象接口的对象。

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

另一答案

这对我有用,不需要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)

以上是关于在python中使用win32在内存中创建一个图标的主要内容,如果未能解决你的问题,请参考以下文章

如何在win32 windows中创建嵌入式文本输入框

Win32 C++ 在类中创建窗口和过程

在Delphi中创建线程,请一定使用BeginThread()代替CreateThread()创建线程!(更好的管理异常)

在启用 CLR 但没有 CRT 的 VC++ 中创建 Win32 dll

使用 ctypes 和 windll 的带有图标的 Python MessageBox

c_cpp 在win32 gui应用程序中创建一个控制台窗口