How can I hide the console window when freezing wxPython applications with cxFreeze?

Question:

I’m developing a Python application using wxPython and freezing it using cxFreeze. All seems to be going fine apart from this following bit:

When I run the executable created by cxFreeze, a blank console window pops up. I don’t want to show it. Is there any way I could hide it?

It doesn’t seem to be documented on the cxFreeze site and Googling didn’t turn up much apart from some similar sorta problems with Py2Exe.

Thanks.

Asked By: Mridang Agarwalla

||

Answers:

If you’re using Windows, you could rename your “main” script’s extension (that launches the app) to .pyw

Answered By: Steven Sproat

This worked to some extent but it has issues. My program runs in both a console mode and a GUI mode. When run from the console with a --console argument it runs in a console mode. When I followed the procedure below, this doesn’t work anymore and my program is only a GUI app then.

The following source code comes from a sample file in the PythonLibsite-packagescx_FreezesamplesPyQt4setup.py. Lesson of the day. Read the README.

# A simple setup script to create an executable using PyQt4. This also
# demonstrates the method for creating a Windows executable that does not have
# an associated console.
#
# PyQt4app.py is a very simple type of PyQt4 application
#
# Run the build process by running the command 'python setup.py build'
#
# If everything works well you should find a subdirectory in the build
# subdirectory that contains the files needed to run the application

import sys

from cx_Freeze import setup, Executable

base = None
if sys.platform == "win32":
    base = "Win32GUI"

setup(
        name = "simple_PyQt4",
        version = "0.1",
        description = "Sample cx_Freeze PyQt4 script",
        executables = [Executable("PyQt4app.py", base = base)])
Answered By: Mridang Agarwalla

Option 1) Use gui2exe to muck with various options.

Option 2) Modify your setup.py with ‘base’ parameter as such.

GUI2Exe_Target_1 = Executable(
    # what to build
    script = "rf_spi.py",
    initScript = None,
    base = 'Win32GUI',  # <-- add this
    targetDir = r"dist",
    targetName = "rf_spi.exe",
    compress = True,
    copyDependentFiles = False,
    appendScriptToExe = False,
    appendScriptToLibrary = False,
    icon = r"wireless.ico"
    )
Answered By: fseto

For Windows:

You have to use a line like this (use file folders and names as appropriate)

C:/Python/Scripts/cxfreeze C:/Python/Code/yourprogram.py --base-name=Win32GUI --target-dir C:/Python/Dist

By adding the --base-name=Win32GUI option, the console window will not appear.

Answered By: Antonio
Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.