macos - 为什么在 Windows 中我可以从 Twistedreactor.callInThread() 中运行 Kivy app.run(),但在 OSX 中却不能?

标签 macos twisted kivy

似乎如果我们开发一个多线程应用程序,我们就不能理所当然地认为它在其他操作系统中也能同样运行。

我正在开发一个 Kivy 应用程序,但这个 Kivy 应用程序实际上是从一个扭曲的reactor.callInThread() 中启动的。这是代码片段:

from twisted.internet import reactor
def start_kivy():
    app = SomeKivyApp()
    app.run()

if __name__ == '__main__':
    reactor.callInThread(start_kivy)
    #it will open Kivy main application window in Windows, but not in OSX
    reactor.run()

上面的代码片段在 Windows 中运行得非常好。但在 OSX 中:Kivy 主应用程序窗口未显示。检查日志文件,没有任何问题。没有发生警告或错误。

知道如何解决这个问题吗?或者,您认为我以错误的方式构建了这个应用程序吗?也就是说,我应该使用 Kivy 应用程序循环,而不是让twisted 控制主应用程序循环吗?

最佳答案

Twisted 在不同平台上使用不同的 Reactor 实现 - Windows 中使用的实现是 Windows 特定的,不在其他平台上使用。这可能就是它在一个平台上运行而不是在另一个平台上运行的原因。

Kivy和Twisted的正确使用方法在 documentation上面提供的恶劣条件。 Kivy 将从 Kivy 的 EventLoop 中迭代 Twisted 循环。这工作完美 - 我的 Kivy 应用程序严重依赖 Twisted。

关于macos - 为什么在 Windows 中我可以从 Twistedreactor.callInThread() 中运行 Kivy app.run(),但在 OSX 中却不能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25784607/

相关文章:

android - 使用 kivy 使用 G+ (Google+) 注册

python - Kivy:touch.ud 是什么意思

java - 将 Java 代码移植到 ObjC 时,如何最好地表示已检查的异常?

python - 如何使用 Twisted 获取 IRC channel 的用户列表

objective-c - 使用自定义 NSView 更改悬停在 NSMenuItem 上的背景颜色

python - 在没有安装权限的服务器上使用 Twisted?

iphone - 通过 Twisted 服务器进行 Apple 商店收据验证

android - 如何在 Kivy 应用程序(Android)中获取 PARTIAL_WAKE_LOCK?

python - 打开文件(例如双击文件)的代码

macos - 如何在 mac os x 中设置默认的 ant 路径?