我正在尝试使用 wxPython 实现观察者设计模式。我有一个在后台计算大量数据的建模应用程序。有时我想在 GUI 中显示模型的输出——这只是一个由不同颜色的正方形组成的网格。其他时候我需要在不显示 GUI 的情况下进行计算。
观察者模式的优点是您可以通过添加或删除一行代码来插入或不插入 GUI,例如
self.observers.append(MyWxGui())
或类似的。现在,要做到这一点,我需要我的计算在一个线程上运行,而 wx GUI 在另一个线程上运行。我尝试使用 wxPython 执行此操作,但总是收到致命的 I/O 错误:
python: Fatal IO error 11 (Resource temporarily unavailable) on X server :0.0.
我阅读了 wxPython 中的多线程教程,例如http://wiki.wxpython.org/LongRunningTasks,但它们都在主线程中运行 Mainloop() 而不是在辅助线程中运行长时间运行的任务,而我需要它反过来。这是因为如果我在主线程中有 Mainloop(),程序会挂起等待来自 GUI 的某些事件,而不是继续计算。
我还看到我无法在子线程中操作设备上下文 (DC),例如 ClientDC 或 PaintDC,但我在同一个线程中运行整个 wx 代码。
Mainloop() 和所有 wx GUI 可以在它自己的线程中运行,而不是主应用程序的线程吗?
在 Ubuntu 10.10 maverick 上运行 wxPython 2.8.11.0。