Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

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.

like image 351
Mridang Agarwalla Avatar asked May 21 '10 07:05

Mridang Agarwalla


4 Answers

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.

like image 102
Antonio Avatar answered Nov 17 '22 22:11

Antonio


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 \Python\Lib\site-packages\cx_Freeze\samples\PyQt4\setup.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)])
like image 28
Mridang Agarwalla Avatar answered Nov 17 '22 22:11

Mridang Agarwalla


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

like image 3
Steven Sproat Avatar answered Nov 17 '22 21:11

Steven Sproat


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"
    )
like image 3
fseto Avatar answered Nov 17 '22 20:11

fseto