我正在使用 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 ] Start application main loop
[ERROR ] [Base ] No event listeners have been created
[ERROR ] [Base ] Application will leave
让它再次工作的唯一方法是重新启动 Spyder 中运行的内核。之后,应用程序将再次启动(但仅一次)。
我注意到,在第一次运行时,Ipython 控制台会在“启动应用程序主循环”行之前首先打印很多其他信息,而在那些失败的运行中,我只得到这 3 个信息上面几行。
有人知道我做错了什么吗?非常感谢您的帮助。
最佳答案
没有那么多与 Kivy 相关的问题。 Spyder 可能会保留旧的东西在内存中吗?尝试在简单的解释器中逐行输入代码。然后关闭应用程序并再次尝试输入 TestApp().run()
- 相同的三行。
这样你就会看到,如果旧的东西(变量,类,任何仍然可以访问的东西)存在,Kivy将不允许你启动应用程序(对我来说仍然是一个谜,可能是因为与窗口相关)代码?)
如果 Spyder 中有一些东西可以从内存中清除旧的东西,那么在每次 Kivy 退出后设置它,你就可以开始了。
关于Python/Kivy 应用程序仅运行一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38042329/