在Django中使用wxSpellCheckerDialog会导致C ++“wxThread :: IsMain()”断言失败

时间:2012-05-08 10:13:39

标签: python django wxpython

继续How to use wxSpellCheckerDialog in Django?

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

首次运行时它可以正常工作。但是当我再次调用它时(或在几次运行之后),它会出现以下错误。

enter image description here

  

/ quiz / submit /

中的PyAssertionError      

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

如何解决这个问题?

2 个答案:

答案 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。但我没有使用它,我不知道它是否适用于你的情况。