我希望我的Kivy应用程序能够在可以相互通信的Windows机器上产生多个应用程序(即新Windows)。
ScreenManager和Popup选项将不会剪切它,因为它们位于同一窗口中。我需要能够在多个监视器之间拖动新屏幕,因此需要多个窗口。
Kivy文档明确声明“ Kivy每个应用程序仅支持一个窗口:请不要尝试创建多个窗口。”
谷歌搜索产生了一种简单的方法,可以从另一个应用程序内简单地生成一个新的应用程序,如下所示:
from kivy.app import App
from kivy.uix.button import Button
from kivy.uix.label import Label
class ChildApp(App):
def build(self):
return Label(text='Child')
class MainApp(App):
def build(self):
b = Button(text='Launch Child App')
b.bind(on_press=self.launchChild)
return b
def launchChild(self, button):
ChildApp().run()
if __name__ == '__main__':
MainApp().run()
Run Code Online (Sandbox Code Playgroud)
但是,当我这样做时,它会在同一窗口中启动该应用程序并崩溃,并且我的终端会疯狂地吐出:
Original exception was:
Error in sys.exceptionhook:
Run Code Online (Sandbox Code Playgroud)
我得到同样的结果,如果代替ChildApp().run()我做multiprocessing.Process(target=ChildApp().run()).start()
使用subprocess库使我更接近想要的东西:
# filename: test2.py
from kivy.app import App
from kivy.uix.label import Label
class ChildApp(App):
def build(self):
return …Run Code Online (Sandbox Code Playgroud)