Python 在Django中使用wxSpellCheckerDialog会导致C++&引用;wxThread::IsMain();断言错误

Python 在Django中使用wxSpellCheckerDialog会导致C++&引用;wxThread::IsMain();断言错误,python,django,wxpython,Python,Django,Wxpython,继续从 我已经使用pyenchant向Django应用程序添加了拼写检查 第一次运行时,它工作正常。但当我再次调用它时(或在多次运行之后),它会给出以下错误 PyAssertionError at/quick/submit/ C++断言“wxThread::IsMain()” 在wxEventLoop::Dispatch()中的..\src\msw\evtloop.cpp(244)处失败: 只有主线程才能处理Windows消息 如何修复此问题?您似乎试图从Django代码内部使用wx控件,对吗

继续从

我已经使用pyenchant向Django应用程序添加了拼写检查

第一次运行时,它工作正常。但当我再次调用它时(或在多次运行之后),它会给出以下错误

PyAssertionError at/quick/submit/

C++断言“wxThread::IsMain()” 在wxEventLoop::Dispatch()中的..\src\msw\evtloop.cpp(244)处失败: 只有主线程才能处理Windows消息


如何修复此问题?

您似乎试图从Django代码内部使用wx控件,对吗?如果是这样,你正在做一件非常奇怪的事情:)


当您使用wxPython编写GUI应用程序时,有一个主线程可以处理窗口消息-主线程被定义为创建wx.App的线程。您正在尝试从非UI线程执行UI操作。因此,可能在第一次运行时一切都正常(一切都在GUI线程中执行),但在第二次尝试时,另一个python线程(由django生成?)正在执行一些非法的GUI操作。您可以尝试使用wx.CallAfter,它将从GUI线程中的参数执行函数,但这是非阻塞的。我还发现了一些你可以考虑的东西:wxAnyThread。但是我没有使用它,我不知道它是否适用于您的情况。

您不需要wxPython来使用pyEnchant。你当然不应该在django中使用wx的东西。wxPython用于桌面gui,而django是一个web应用程序框架。正如“uhz”所指出的,除非使用wx.CallAfter等线程安全方法,否则不能在wxPython运行的主线程之外调用wxPython方法。我不知道你为什么要从Django调用wxPython。

请注意:你完全知道你实际上在服务器端执行一些wxPython代码?那么,当django处理http请求时,您的窗口是在服务器上创建/显示的?