继续How to use wxSpellCheckerDialog in Django?
我已经使用pyenchant为Django应用程序添加了拼写检查。
首次运行时它可以正常工作。但是当我再次调用它时(或在几次运行之后),它会出现以下错误。
/ quiz / submit /
中的PyAssertionErrorC ++断言“wxThread :: IsMain()” 在wxEventLoop :: Dispatch()中的.... \ src \ msw \ _ evtloop.cpp(244)失败: 只有主线程可以处理Windows消息
如何解决这个问题?
答案 0 :(得分:1)
您不需要wxPython来使用pyEnchant。你肯定不应该使用django的wx东西。 wxPython用于桌面GUI,而django是一个Web应用程序框架。正如“uhz”指出的那样,除非使用其线程安全方法,例如wx.CallAfter,否则不能在wxPython运行的主线程之外调用wxPython方法。我不知道你为什么要从Django调用wxPython。
答案 1 :(得分:0)
看来你正试图从Django代码中使用wx控件,这是正确的吗?如果是这样,你做的很奇怪:)
使用wxPython编写GUI应用程序时,有一个主线程可以处理Window消息 - 主线程被定义为创建wx.App的线程。您正在尝试从非UI线程执行UI操作。所以可能在第一次运行时一切正常(一切都在GUI线程中执行)但在第二次尝试时,一个不同的python线程(由django生成?)正在执行一些非法的GUI操作。您可以尝试使用wx.CallAfter,它将从GUI线程中的参数执行一个函数,但这是非阻塞的。我也找到了你可以考虑的东西:wxAnyThread wxAnyThread。但我没有使用它,我不知道它是否适用于你的情况。