Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos 为什么在Windows中我可以从Twisted reactor.callInThread()中运行Kivy app.run(),但不能在OSX中运行?_Macos_Twisted_Kivy - Fatal编程技术网

Macos 为什么在Windows中我可以从Twisted reactor.callInThread()中运行Kivy app.run(),但不能在OSX中运行?

Macos 为什么在Windows中我可以从Twisted reactor.callInThread()中运行Kivy app.run(),但不能在OSX中运行?,macos,twisted,kivy,Macos,Twisted,Kivy,似乎如果我们开发一个多线程应用程序,我们不能想当然地认为它会在其他操作系统中运行相同的应用程序 我正在开发一个Kivy应用程序,但这个Kivy应用程序实际上是从Twistedreactor.callInThread()中启动的。以下是代码片段: from twisted.internet import reactor def start_kivy(): app = SomeKivyApp() app.run() if __name__ == '__main__': re

似乎如果我们开发一个多线程应用程序,我们不能想当然地认为它会在其他操作系统中运行相同的应用程序

我正在开发一个Kivy应用程序,但这个Kivy应用程序实际上是从Twistedreactor.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主应用程序窗口不显示。检查日志文件,没有问题。没有出现警告或错误


有没有办法解决这个问题?或者,您认为我用错误的方式设计了这个应用程序吗?也就是说,与其让twisted控制主应用程序循环,不如改用Kivy应用程序循环

Twisted在不同的平台上使用不同的reactor实现,在Windows中使用的实现是特定于Windows的,不在其他平台上使用。所以这可能就是为什么它在一个平台上工作,而不是在另一个平台上


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

我不使用Twisted,但你可能会发现在Kivy中运行Twisted很有趣。我有个坏消息要告诉你。即使您开发了一个单线程应用程序,您也不能确定它在每个操作系统上都会运行相同的应用程序!:)@是的,我确实读过。但是,我当然想知道为什么上面的代码没有按预期运行expected@Jean-保尔·卡尔德隆:我得说,这可能是我假设中最容易注意到的错误!我认为你说得对,reactor实现的一部分是特定于操作系统的。上面的代码非常适合PyQt应用程序(…但实际上,它是一款仅在Windows上设计的产品,尚未在OSX中测试)。我懂了。。让我在代码中应用上面的文档指南。我可能不得不以这种方式重新设计我的应用程序,我接受了@Ryan answer,尽管要使用的确切代码在此摘要中,来自以下github问题:。我只需实现
\u reactor\u init()
及其所有依赖的方法。此后,如Ryan所说,对
reactor.callInThread
reactor.callFromThread
的调用可以完美地工作:在OSX/Windows中。总而言之,在Windows中,不安装Kivy reactor,程序运行良好。但它不会在OSX上运行。要使应用程序在两个操作系统上运行,必须安装Kivy提供的reactor。谢谢@swdev您不需要这样做
kivy.support.install\u twisted\u reactor()
由hansent使用其要点中的代码创建。他们做了几乎相同的事情,除了Kivy中的代码与gist中没有的任何错误修复保持最新。谢谢Ryan!我需要更好地查看我的代码。目前应用程序运行良好(不确定是否会遇到任何bug)。我会告诉你事情的进展。