从资源文件构建 wxPython wx.Icon

build a wxPython wx.Icon from a resource file

我有一个 wxPython 应用程序,我在如下代码中的主窗体上加载了一个图标

        icon = wx.Icon()
        icon.CopyFromBitmap(wx.Bitmap("icons/sm.ico", wx.BITMAP_TYPE_ANY))
        # icon.LoadFile("icons/sm.ico", wx.BITMAP_TYPE_ANY)
        self.SetIcon(icon)

在开发环境中 运行 时,这在 python 代码中有效,我有一个 icons/ 文件夹,其中包含 sm.ico 文件,但是当我打包时顶一下,最后的exe找不到“icons/sm.ico”.

于是,我尝试把这个ico文件放到一个资源文件中,于是我建了如下qrc文件:

<RCC>
  <qresource prefix="/">
    <file>icons/sm.ico</file>
  </qresource>
</RCC>

然后,我使用pyrcc5.exe命令将其转换为python文件(例如sm_rc.py),但我不知道如何从中加载ico图像资源文件。我试过 'LoadFile' 如下,没用:

import src.ui.sm_rc
icon.LoadFile("icons/sm.ico", wx.BITMAP_TYPE_ANY)

所以,根本的问题是如何构建一个资源文件,wxPython 可以从中读取图像。

你在重新发明轮子。
wxpython 可以将 png 图像合并到 python 模块中。
然后您可以将它们作为图像、位图或图标访问。

https://docs.wxpython.org/wx.tools.img2py.html#module-wx.tools.img2py

这是我在一个Linux项目中使用的代码,根据需要进行调整:

#!/bin/bash
rm fs_images.py
touch fs_images.py
img2py -n footswitch24 -c -i -f ../footswitch24.png fs_images.py
img2py -a -n footswitch24HiVis -c -i -f ../footswitch24HiVis.png fs_images.py
img2py -a -n footswitch24HiVisB -c -i -f ../footswitch24HiVisB.png fs_images.py
img2py -a -n footswitch24HiVisY -c -i -f ../footswitch24HiVisY.png fs_images.py
for image in *.png
do
 short=$(echo "$image" | awk -F'.' '{print }')
 img2py -a -n $short -c -f $image fs_images.py
done
cp fs_images.py ../

在您的代码中,import fs_images 然后通过以下方式访问图像:

self.pause = wx.BitmapButton(self.panel3, -1, size=pb_size, bitmap=fs_images.getpauseBitmap())

ico:

self.ico = fs_images.getfootswitch24Icon()
self.SetIcon(self.ico)

瞧!不再丢失图像文件,您将所有内容打包在一个 python 模块中。