Python / Kivy App 运行 只有一次

Python / Kivy App running only once

我正在 运行使用来自 Anaconda 平台的 Spyder IDE 编写一个非常简单的 python (3.5) 脚本。

from kivy.app import App
from kivy.uix.label import Label
from kivy.uix.gridlayout import GridLayout
from kivy.uix.textinput import TextInput

class LoginScreen(GridLayout):
    def __init__(self, **kwargs):
        super(LoginScreen,self).__init__(*kwargs)
        self.cols = 2
        self.add_widget(Label(text='Username'))
        self.username = TextInput(multiline=False)
        self.add_widget(self.username)
    
        self.add_widget(Label(text='Password'))
        self.password = TextInput(multiline=False, password=True)
        self.add_widget(self.password)

class TestApp(App):
    def build(self):
        return LoginScreen()

if __name__ == '__main__':
    TestApp().run()

“App”运行第一次尝试时很好(它还没有做任何事情,只是启动),但是当我再次尝试启动它时,出现以下错误留言:

[INFO ] [Base ] Start application main loop

[ERROR ] [Base ] No event listeners have been created

[ERROR ] [Base ] Application will leave

让它再次工作的唯一方法是在 Spyder 中重新启动内核 运行ning。之后应用程序将再次启动(但只有一次)。

我注意到,在第一个 运行 上,Ipython 控制台会先打印很多其他信息,在“启动应用程序主循环”行之前,然后在那些失败 运行s,我只得到上面的那 3 行。

有谁知道我做错了什么?非常感谢您的帮助。

与 Kivy 相关的问题不多。 Spyder 可能会在内存中保留旧内容?尝试在一个简单的解释器中逐行键入您的代码。然后关闭应用程序并再次尝试输入 TestApp().run() - 同样的三行。

这样你会看到如果旧的东西(变量,类,任何仍然可以访问的东西)存在,Kivy 将不允许你启动应用程序(对我来说仍然是一个谜,可能是因为 window 相关的代码?)

如果 Spyder 中有一些东西可以从内存中清除旧东西,那么在每次 Kivy 退出后设置它,你就可以开始了。