1

好的,我有一个用cherrypy编写的应用程序,我想为它构建一个wxpython gui。问题是两个模块都使用闭环进行事件处理,这(我假设)意味着当一个模块运行时,另一个模块将被锁定。

我征求了一些建议,有人建议我合并两个事件循环而不是使用股票入口点(cherrypy 的 quickloop() 和 wx 的 MainLoop())

问题是我不知道该怎么做。任何建议将不胜感激。

4

2 回答 2

6

你已经在这里问了同样的问题:cherrypy 和 wxpython,我给了你在任何地方都能找到的最好的回答,显然,这是被投票支持的。怎么又问了?

于 2010-01-13T16:03:49.660 回答
0

在cherrypy的情况下,你有来源。查看代码做什么quickloop(),然后尝试将此代码与MainLoop()WX 合并。

两个循环可能看起来像这样:

while (true) {
    if (pendingEvents()) processEvents ();
    else waitForEvents ();
}

您必须找到一种方法将两个等待调用合并为一个(因此,如果任一事件源有未决事件,代码将继续执行)。对于 WX ,请查看Dispatch()和。Pending()ProcessIdle()

或者您可以查看wxIdleEvent(参见文档)并处理其中的所有樱桃事件。

另一种解决方案可能是在不同的线程中运行这两个循环。在这种情况下,您不能从cherrypy 代码中调用WX 方法,反之亦然。为了解决这个问题,您必须找到一种方法将消息发送到另一个线程,其中包含要调用哪个方法的所有信息。这确保了 WX 方法在 WX 线程中执行,cherrypy 方法在cherrypy 线程中执行。

于 2010-01-13T08:14:26.753 回答