Python/Kivy 应用程序仅运行一次

标签 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 ] 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/

相关文章:

python - Flask-WTForms使用jQuery移至下一个表单字段

python - 从特定行重新运行代码

Python re.finditer() : concisely detect "A or :B or C:D"

python - Kivy安装没有找到GL/gl.h?

python - 如何在Spyder IDE中F9后自动前进到下一行

python - 配置 Sympy 启动显示输出

python - 使用 autorun 运行 python 应用程序时出现编码问题

python - Kivy 中的圆角交替边缘

python - 替换损坏的spyder.ini 文件(使用 winpython 64)

python-3.x - Spyder 未启动,出现 TypeError : __init__() missing 1 required positional argument