从资源文件构建 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 模块中。
我有一个 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 模块中。