次の最小限の例は、Windows 7 32ビット、Python 2.7.1、wx 2.8.12.2(msw-unicode)を使用して機能します。がpython setup.py develop
呼び出されると、コンソールスクリプトとGUIスクリプトの両方に対してcofo.exe
とがそれぞれ生成されます。cofogui.exe
が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()