0

Django で wxSpellCheckerDialog を使用するには?からの続き

pyenchant を使用して Django アプリケーションにスペル チェックを追加しました。

最初の実行時には正しく動作します。しかし、もう一度呼び出すと(または数回実行した後)、次のエラーが発生します。

ここに画像の説明を入力

/quiz/submit/ の PyAssertionError

C++ アサーション "wxThread::IsMain()" が wxEventLoop::Dispatch() の ....\src\msw\evtloop.cpp(244) で失敗しました: Windows メッセージを処理できるのはメイン スレッドだけです

これを修正する方法は?

4

2 に答える 2

1

pyEnchant を使用するのに wxPython は必要ありません。また、django で wx を使用するべきではありません。wxPython はデスクトップ GUI 用で、django は Web アプリ フレームワークです。「うーん」が指摘したように、wx.CallAfter などのスレッドセーフなメソッドを使用しない限り、wxPython が実行されるメイン スレッドの外部で wxPython メソッドを呼び出すことはできません。ただし、なぜ Django から wxPython を呼び出すのかわかりません。

于 2012-05-08T14:18:12.627 に答える
0

Djangoコード内からwxコントロールを使用しようとしているようですが、それは正しいですか?もしそうなら、あなたは非常に奇妙なことをしています:)

wxPythonを使用してGUIアプリケーションを作成する場合、ウィンドウメッセージを処理できるメインスレッドが1つあります。メインスレッドは、wx.Appが作成されたスレッドとして定義されます。UI以外のスレッドからUIを実行しようとしています。したがって、おそらく最初はすべてが機能しますが(すべてはGUIスレッドで実行されます)、2回目の試行では、別のPythonスレッド(djangoによって生成されますか?)が不正なGUIアクションを実行しています。GUIスレッドの引数から関数を実行するwx.CallAfterを使用してみることができますが、これは非ブロッキングです。また、私はあなたが考えるかもしれない何かを見つけました:wxAnyThreadwxAnyThread。しかし、私はそれを使用しませんでした、そしてそれがあなたの場合に当てはまるかどうかはわかりません。

于 2012-05-08T13:30:37.360 に答える