Mau*_*oto 6 python python-2.7 spyder kivy
有谁知道为什么Python的2.7 Spyder只是成功初始化'Hello World'Kivy应用程序一次,即点击F5会带来窗口应用程序,但当我关闭它并再次点击F5时,它会显示以下错误:
[INFO ] [Base ] Start application main loop
[ERROR ] [Base ] No event listeners have been created
[ERROR ] [Base ] Application will leave
Run Code Online (Sandbox Code Playgroud)
但是,通过Anacondas命令提示符初始化时没有错误.
这是代码(与网站相同):
from kivy.app import App
from kivy.uix.button import Button
class TestApp(App):
def build(self):
return Button(text='Hello World')
TestApp().run()
if __name__ == '__main__':
TestApp().run()
Run Code Online (Sandbox Code Playgroud)
实际上,示例程序只是一个最小的结构,您可以尝试以这种简单的方式创建交互式UI.
而在TestApp,它实际上并没有影响event listerners处理关闭事件.当你创建你的实际项目时,你应该总是照顾它.如果logging仔细观察,你会注意到当你关闭时错误发生了TestApp,而不是当你"重新启动"时TestApp:
[INFO ] [Base ] Leaving application in progress...
INFO:kivy:[Base ] Leaving application in progress...
[INFO ] [Base ] Start application main loop
INFO:kivy:[Base ] Start application main loop
[ERROR ] [Base ] No event listeners have been created
ERROR:kivy:[Base ] No event listeners have been created
[ERROR ] [Base ] Application will leave
ERROR:kivy:[Base ] Application will leave
Run Code Online (Sandbox Code Playgroud)
因此,对于您的情况,一个简单的解决方法是,您Run->Configure在Console面板中,而不是您选择Execute in current Python or IPython console,您只需选择第二个选项,即Execute in a new dedicated Python console.在这种情况下,在完成代码的时间,Python将关闭当前内核.无论何时运行代码,Spyder都会自动为此特定脚本创建新的专用内核.
参考网页:https : //groups.google.com/forum/m/#!topic/ kivy-users/ yfhH7skAEJA,它给出了解决此问题的解决方案,我将代码重写如下,
from kivy.app import App
from kivy.uix.button import Button
class TestApp(App):
def build(self):
return Button(text='Hello World')
def reset():
import kivy.core.window as window
from kivy.base import EventLoop
if not EventLoop.event_listeners:
from kivy.cache import Cache
window.Window = window.core_select_lib('window', window.window_impl, True)
Cache.print_usage()
for cat in Cache._categories:
Cache._objects[cat] = {}
if __name__ == '__main__':
reset()
TestApp().run()
Run Code Online (Sandbox Code Playgroud)
reset() 函数将清理 Window 的状态并正常运行 TestApp()。