我使用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行。
有谁知道我做错了什么?非常感谢您的帮助。
答案 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?网页上,我在那里给出了答案,请参考。