ChangeMyName
ChangeMyName

Reputation: 7408

Py2exe compiles properly but the built application doesn't work

I am using Python 2.7 to build my application. Within it, I used few packages which are numpy, scipy, csv, sys, xlwt, time, wxpython and operator.

All the above packages are in 64-bit, and I am using python 2.7(64-bit version) in Aptana Studio 3(64-bit version) in Windows 7 Professional (64-bit version).

At last, I'd like to compile my project to an application using following code, the file name is py2exeTest.py:

from distutils.core import setup
import numpy                  # numpy is imported to deal with missing .dll file

import py2exe

setup(console=["Graphical_Interface.py"])

Then in cmd, I switched to the directory of the project and used following line to compile it:

python py2exeTest.py py2exe

Everything goes well, it generates an application under dist directory, and the application name is Graphical_Interface.exe.

I double clicked it, but there is a cmd window appears, and a python output windows flashes, then both of them disappeared. I tried to run the application as an administrator, the same outcome I've had.

May I know how to work this out?

Thanks!

EDIT:

I've managed to catch the error information that flashes on the screen. The error info I had is:

Traceback (most recent call last):
  File "Graphical_Interface.py", line 397, in <module>
  File "Graphical_Interface.py", line 136, in __init__
  File "wx\_core.pyc", line 3369, in ConvertToBitmap
wx._core.PyAssertionError: C++ assertion "image.Ok()" failed at ..\..\src\msw\bitmap.cpp(802) in wxBitmap::CreateFromImage(): invalid image

I used one PNG image in the project, the code is like follows:

self.workflow = wx.Image("Work Flow.png", wx.BITMAP_TYPE_ANY).ConvertToBitmap()
wx.StaticBitmap(self.panel_settings, -1, self.workflow, (330,270), (self.workflow.GetWidth(), self.workflow.GetHeight()))

I tried to comment the above chunk out from the project, and the application works properly. However, I need the image to show up in the application.

May I know how to deal with it?

Thanks.

Upvotes: 2

Views: 1861

Answers (2)

Torxed
Torxed

Reputation: 23480

When compiling graphical applications you can not create them as a console application because reasons (honestly can't explain the specifics out of my head), but try this:

from distutils.core import setup
import numpy
import py2exe
import wxpython
setup(window=['Graphical_Interface.py'],
      options={"py2exe" { 'boundle_files' : 1}})

Also consider changing to:

It works with Python3 and supports multiple platforms.
A cx_freeze script would look something like:

import sys
from cx_Freeze import setup, Executable

# Dependencies are automatically detected, but it might need fine tuning.
build_exe_options = {"packages": ["os"], "excludes": ["tkinter"]}

# GUI applications require a different base on Windows (the default is for a
# console application).
base = None
if sys.platform == "win32":
    base = "Win32GUI"

includefiles = ['/folder/image.png']

setup(  name = "GUIprog",
        version = "0.1",
        description = "My GUI application!",
        options = {"build_exe": build_exe_options, 'include_files' : includefiles},
        executables = [Executable("Graphical_Interface.py", base=base)])

Upvotes: 2

ChangeMyName
ChangeMyName

Reputation: 7408

No worries, I've got the solution.

It turns out that the image is in the project folder rather than in the dist folder. So I have two solutions:

  1. Copy the image into dist folder

  2. Include the full path of the image in the code.

Thanks for your help.

Upvotes: 0

Related Questions