Python / Kivy App只运行一次

时间:2016-06-26 19:21:18

标签: python kivy spyder

我使用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()

"应用"第一次尝试运行正常(它还没有做任何事情,只是启动),但是当我尝试再次启动它时,我收到以下错误消息:

  

[INFO] [Base]启动应用程序主循环

     

[错误] [基础]未创建任何事件侦听器

     

[错误] [基础]申请将离开

让它再次运行的唯一方法是重启Spyder中运行的内核。之后,应用程序将再次启动(但只能启动一次)。

我注意到的是,在第一次运行时,Ipython控制台会在"启动应用程序主循环之前首先打印很多其他信息。在那些失败的跑步中,我只得到了上面的那3行。

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

2 个答案:

答案 0 :(得分:2)

与Kivy相关的问题并不多。 Spyder可能会把旧东西留在记忆中?尝试使用简单的解释器逐行输入代码。然后关闭应用并再次尝试键入vertical-align: top - 相同的三行。

通过这种方式,您可以看到,如果旧的东西(变量,类,任何仍然可访问的东西)存在,Kivy不会允许您启动应用程序(对我来说仍然是个谜,也许是因为与窗口相关的代码?)

如果Spyder中有东西要从内存中清除旧东西,那么在每个Kivy出口后设置它,你应该好好去。

答案 1 :(得分:1)

此问题类似于“ Python Spyder一次初始化Hello World Kivi应用程序?”问题。在Python Spyder initializing Hello World Kivi app once?网页上,我在那里给出了答案,请参考。