cx使用wxpython冻结,使用exe添加图像

时间:2012-03-05 22:55:28

标签: python wxpython wxwidgets py2exe cx-freeze

我正在尝试使用wxpython

的位图

在main.py中我有:

imag=wx.Image("picture.bmp",wx.BITMAP_TYPE_BMP).ConvertToBitmap()

picture.bmp与main.py在同一个文件夹中, 该程序在IDE中运行时可以正常工作

当我制作一个exe时,它不起作用。

当我运行cx_freeze创建的exe时,我会弹出一个cmd框并显示:

 wxBitmap CreatefromImage(): invalid image

3 个答案:

答案 0 :(得分:1)

使用此方法

import imp
import os
import sys

def main_is_frozen():
    return (hasattr(sys, "frozen") or # new py2exe
            hasattr(sys, "importers") # old py2exe
            or imp.is_frozen("__main__")) # tools/freeze

def get_main_dir():
   if main_is_frozen():
       return os.path.dirname(sys.executable)
   return os.path.dirname(sys.argv[0])

使用此代码获取图像路径

imag=wx.Image(get_main_dir()+"/picture.bmp",wx.BITMAP_TYPE_BMP).ConvertToBitmap()

答案 1 :(得分:1)

我使用方法大纲here执行此操作。

基本上,这使用from wx.tools import img2py将图像转换为.py文件中的字符串。然后,可以使用此from wx.lib.embeddedimage import PyEmbeddedImage文件顶部的.py将这些字符串作为位图读取。

这样,图像就可以像普通的Python文件一样处理。

例如,在wxPython演示的images.py文件中,前几行看起来像

from wx.lib.embeddedimage import PyEmbeddedImage

Mondrian = PyEmbeddedImage(
    "iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAHFJ"
    "REFUWIXt1jsKgDAQRdF7xY25cpcWC60kioI6Fm/ahHBCMh+BRmGMnAgEWnvPpzK8dvrFCCCA"
    "coD8og4c5Lr6WB3Q3l1TBwLYPuF3YS1gn1HphgEEEABcKERrGy0E3B0HFJg7C1N/f/kTBBBA"
    "+Vi+AMkgFEvBPD17AAAAAElFTkSuQmCC")

这是一张看起来像蒙德里安画的小图片。

答案 2 :(得分:0)

好像你有2种不同的程序运行方式,每种方式都有不同的工作文件夹。您是否尝试过提供picture.bmp文件的完整绝对路径?

imag=wx.Image("C:/this/that/theother/picture.bmp",wx.BITMAP_TYPE_BMP).ConvertToBitmap()