0

如何在 Django 中使用 wxSpellCheckerDialog?

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

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

在此处输入图像描述

/quiz/submit/ 处的 PyAssertionError

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

如何解决这个问题?

4

2 回答 2

1

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

于 2012-05-08T14:18:12.627 回答
0

看来您正在尝试从 Django 代码中使用 wx 控件,对吗?如果是这样,您正在做一件非常奇怪的事情:)

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

于 2012-05-08T13:30:37.360 回答