замораживание cx с помощью wxpython, добавление изображений с помощью exe - PullRequest
2 голосов
/ 06 марта 2012

Я пытаюсь использовать растровое изображение с wxpython

в main.py У меня есть:

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

picture.bmp находится в той же папке, что и main.py, эта программа работаетпри запуске в IDE

он не работает, когда я делаю exe.

Когда я запускаю exe, созданный cx_freeze, я получаю окно cmd, которое всплывает и показывает это:

 wxBitmap CreatefromImage(): invalid image

Ответы [ 3 ]

1 голос
/ 06 марта 2012

Используйте эти методы

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 голос
/ 07 марта 2012

Я делаю это, используя схему захода на посадку здесь .

По сути, здесь используется from wx.tools import img2py для преобразования изображения в символьную строку в файле .py.Затем можно использовать from wx.lib.embeddedimage import PyEmbeddedImage вверху этого .py файла для чтения в этих символьных строках как растровых изображений.

Таким образом, изображения можно обрабатывать точно так же, как и обычные файлы Python.

Например, в файле images.py демонстрации wxPython первые несколько строк выглядят как

from wx.lib.embeddedimage import PyEmbeddedImage

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

, то есть небольшое изображение, похожее на картину Мондриана.

0 голосов
/ 06 марта 2012

Похоже, у вас есть 2 разных способа запуска вашей программы, с разными рабочими папками для каждого. Вы пытались указать полный абсолютный путь к файлу picture.bmp?

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