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

发布于 2024-07-07 02:24:16 字数 619 浏览 7 评论 0原文

在 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)

...where self. icon 是我创建的图标的文件名。

有什么办法可以在内存中做到这一点吗? 编辑:我想做的就是创建一个图标,上面显示一个 2 位数字(天气任务栏样式。

What's a good way to generate an icon in-memory in python? Right now I'm forced to use pygame to draw the icon, then I save it to disk as an .ico file, and then I load it from disk as an ICO resource...

Something like this:

    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)

...where self.icon is the filename of the icon I created.

Is there any way to do this in memory? EDIT: All I want to do is create an icon with a 2-digit number displayed on it (weather-taskbar style.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

不必了 2024-07-14 02:24:16

您可以使用 wxPython 来实现此目的。

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

wxBitmap 可以使用 wxMemoryDC,查看 此处了解您可以在 DC 上执行的操作。

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

frame.SetIcon(icon)

You can use wxPython for this.

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

The wxBitmap can be generated in memory using wxMemoryDC, look here for operations you can do on a DC.

This icon can then be applied to a wxFrame (a window) or a wxTaskBarIcon using:

frame.SetIcon(icon)
把梦留给海 2024-07-14 02:24:16

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

http://docs.python.org/library/stdtypes.html# bltin 文件对象

You can probably create a object that mimics the python file-object interface.

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

℡Ms空城旧梦 2024-07-14 02:24:16

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

This is working for me and doesn't require 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)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文