2

我正在尝试使用带有 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
4

3 回答 3

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()
于 2012-03-06T06:51:54.873 回答
1

我使用这里的方法大纲来做到这一点。

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

这样,图像可以被完全视为常规 Python 文件。

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

from wx.lib.embeddedimage import PyEmbeddedImage

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

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

于 2012-03-06T21:19:06.837 回答
0

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

imag=wx.Image("C:/this/that/theother/picture.bmp",wx.BITMAP_TYPE_BMP).ConvertToBitmap()
于 2012-03-05T23:13:49.263 回答