4

私はwxPythonが初めてです。簡単なチュートリアル (http://wiki.wxpython.org/wxPython%20by%20Example) から始めると、Spyder と wxPython の間に競合があるようです。以下を使用して、(IPython コンソールで) 次のスクリプトを 1 回実行できます。

runfile(r'C:\Python27\Scripts\test\test.py')

を含む:

import wx

class Frame(wx.Frame):
    def __init__(self, title):
        wx.Frame.__init__(self, None, title=title, size=(350,200))

app = wx.App(redirect=True)
top = Frame("Hello World")
top.Show()
app.MainLoop()

しかし、2回目に実行すると、次のエラーが発生しました。

Traceback (most recent call last):
  File "<ipython console>", line 1, in <module>
  File "C:\Python27\lib\site-packages\spyderlib\widgets\externalshell\sitecustomize.py", line 493, in runfile
execfile(filename, namespace)
  File "C:\Python27\Scripts\test\test.py", line 14, in <module>
top = Frame("Hello World")
  File "C:\Python27\Scripts\test\test.py", line 11, in __init__
wx.Frame.__init__(self, None, title=title, size=(350,200))
  File "C:\Python27\lib\site-packages\wx-2.8-msw-unicode\wx\_windows.py", line 505, in __init__
_windows_.Frame_swiginit(self,_windows_.new_Frame(*args, **kwargs))
PyNoAppError: The wx.App object must be created first!

よくわかりませんが、どうやらspyderがwxPythonを使用して書かれていることと、app.MainLoop()との競合に関連しているようです

誰かがもう少し確認および/または説明できますか?

どうもありがとう、

パトリック

4

2 に答える 2

4

対話型インタープリター セッションで例を実行しようとしていることが原因だと思われます。この例は実際にはイベント ループを持つ GUI アプリケーションであり、前回の実行からの前のアプリのクリーンアップが完全に行われないため、同じ対話型セッションで繰り返し実行するとうまく動作しません。経験したように、一度実行されますが、その後の試行は失敗します。このような例は、GUI を閉じたときに完全に終了できる独自の専用インタープリターで実行する必要があります。

Spyder では、別の外部コンソールで手動で実行することなく、専用のスタンドアロン インタープリターで実行するようにスクリプトを構成できます。Spyder エディターでファイルを開き、F6 を押して [実行設定] ダイアログを開き、[新しい専用 Python インタープリターで実行] のラジオ ボタンを選択します。今すぐ実行を押します。F5 を使用した後続の実行では、この構成設定が記憶され、実行が繰り返されるたびに独自のインタープリターで実行される例が得られます。

于 2013-05-03T15:24:33.097 に答える
2

これは、Python に付属している tkinter ベースの Python IDE である IDLE を使用して wxPython アプリケーションを実行するときに発生する可能性がある問題と同じだと思います。基本的には 2 つのメイン ループがあり、それが機能することもあれば、競合が発生して、このような奇妙なエラーが発生することもあります。2 つの wx.Apps を実行していると、「未定義」の土地にいると思いますが、これは「悪い」ことです。IPython 自体、コマンド ライン、または 2 つの wx イベント ループが発生しない他の方法からアプリケーションを実行するだけです。

于 2012-06-26T16:22:47.427 に答える