好的,我有一个用cherrypy编写的应用程序,我想为它构建一个wxpython gui。问题是两个模块都使用闭环进行事件处理,这(我假设)意味着当一个模块运行时,另一个模块将被锁定。
我征求了一些建议,有人建议我合并两个事件循环而不是使用股票入口点(cherrypy 的 quickloop() 和 wx 的 MainLoop())
问题是我不知道该怎么做。任何建议将不胜感激。
你已经在这里问了同样的问题:cherrypy 和 wxpython,我给了你在任何地方都能找到的最好的回答,显然,这是被投票支持的。怎么又问了?
在cherrypy的情况下,你有来源。查看代码做什么quickloop()
,然后尝试将此代码与MainLoop()
WX 合并。
两个循环可能看起来像这样:
while (true) {
if (pendingEvents()) processEvents ();
else waitForEvents ();
}
您必须找到一种方法将两个等待调用合并为一个(因此,如果任一事件源有未决事件,代码将继续执行)。对于 WX ,请查看Dispatch()
和。Pending()
ProcessIdle()
或者您可以查看wxIdleEvent
(参见文档)并处理其中的所有樱桃事件。
另一种解决方案可能是在不同的线程中运行这两个循环。在这种情况下,您不能从cherrypy 代码中调用WX 方法,反之亦然。为了解决这个问题,您必须找到一种方法将消息发送到另一个线程,其中包含要调用哪个方法的所有信息。这确保了 WX 方法在 WX 线程中执行,cherrypy 方法在cherrypy 线程中执行。