以下最小示例适用于我使用 Windows 7 32 位、Python 2.7.1、wx 2.8.12.2 (msw-unicode)。python setup.py develop
调用时,分别为cofo.exe
控制台cofogui.exe
和 GUI 脚本生成 和 。
执行时cofogui.exe
,不会出现控制台窗口(这就是您所说的“免费”控制台吗?)
此示例使用setuptools对distutils
.
setup.py:
#!/usr/bin/env python
from setuptools import setup
setup(name='cofo',
packages=['cofo'],
entry_points={
'console_scripts' : [
'cofo = cofo:gui_main'
],
'gui_scripts' : [
'cofogui = cofo:gui_main'
]
}
)
和
cofo/__init__.py:
#!/usr/bin/env python
import wx
def gui_main():
app = wx.App(False) # Create a new app, don't redirect stdout/stderr to a window.
frame = wx.Frame(None, wx.ID_ANY, "Hello World") # A Frame is a top-level window.
frame.Show(True) # Show the frame.
app.MainLoop()
更新:
基于 Windows 和 Unix 的平台在启动进程时操作不同。在 Unix 系统上,如果应用程序要继续在后台运行,通常的过程是使用os.fork()
系统调用。如另一个答案中所述,这可以通过编写一个为您执行后台处理的包装脚本在您的应用程序之外完成。
如果这必须是完全在 Python 中的通用解决方案,那么类似以下的内容应该可以满足您的需求:
cofo/__init__.py:
#!/usr/bin/env python
import os
import wx
def main_app():
app = wx.App(False) # Create a new app, don't redirect stdout/stderr to a window.
frame = wx.Frame(None, wx.ID_ANY, "Hello World") # A Frame is a top-level window.
frame.Show(True) # Show the frame.
app.MainLoop()
def gui_main():
"""Start GUI application.
When running on Unix based platform, fork and detach so that terminal from
which app may have been started becomes free for use.
"""
if not hasattr(os, 'fork'):
main_app()
else:
if os.fork() == 0:
main_app()