問題描述
我正在使用 Anaconda 平臺的 Spyder IDE 運(yùn)行一個非常簡單的 python (3.5) 腳本.
I'm running a very simple python (3.5) script using Spyder IDE from Anaconda platform.
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()
應(yīng)用程序"第一次嘗試運(yùn)行良好(它還沒有做任何事情,只是啟動),但是當(dāng)我嘗試再次啟動它時,我收到以下錯誤消息:
"App" runs fine on the first try (it doesn't do anything yet, just launches), but when I'm trying to launch it again, I'm getting a following error message:
[INFO] [Base] 啟動應(yīng)用程序主循環(huán)
[INFO ] [Base ] Start application main loop
[ERROR] [Base] 沒有創(chuàng)建事件監(jiān)聽器
[ERROR ] [Base ] No event listeners have been created
[ERROR ] [Base ] 應(yīng)用程序?qū)㈦x開
[ERROR ] [Base ] Application will leave
讓它再次工作的唯一方法是重新啟動在 Spyder 中運(yùn)行的內(nèi)核.之后,應(yīng)用程序?qū)⒃俅螁?但僅啟動一次).
The only way to make it work again is to restart the kernel running in Spyder. After that the app will launch once again (but only once).
我注意到,在第一次運(yùn)行時,Ipython 控制臺會首先打印很多其他信息,在啟動應(yīng)用程序主循環(huán)"之前.行,在那些失敗的運(yùn)行中,我只得到上面那 3 行.
What I've noticed is that on the first run, the Ipython console would print a lot of other info first, before the "Start application main loop" line, and on those failed runs, I'm getting just those 3 lines above.
有誰知道我做錯了什么?非常感謝您的幫助.
Does anyone know what I'm doing wrong? Many thanks for any help.
推薦答案
沒有那么多與 Kivy 相關(guān)的問題.Spyder 可能會在內(nèi)存中保留舊的東西?嘗試在一個簡單的解釋器中逐行鍵入您的代碼.然后關(guān)閉應(yīng)用程序并再次嘗試輸入 TestApp().run()
- 相同的三行.
Not that much Kivy-related problem. Spyder probably keeps old stuff in memory? Try in a simple interpreter type your code line by line. Then close the app and try again typing TestApp().run()
- the same three lines.
這樣你會看到如果舊的東西(變量、類、任何仍然可以訪問的東西)存在,Kivy 將不允許你啟動應(yīng)用程序(對我來說仍然是一個謎,可能是因?yàn)榕c窗口相關(guān)代碼?)
This way you'll see that if the old stuff (variables, classes, whatever is still accessible) is present, Kivy won't allow you to launch the app (still a mistery to me, maybe because of window-related code?)
如果 Spyder 中有什么東西可以從內(nèi)存中清除舊的東西,那么在每次 Kivy 退出后設(shè)置它,你應(yīng)該很高興.
If there is something in Spyder to flush old stuff from memory, then set it after each Kivy exit and you should be good to go.
這篇關(guān)于Python/Kivy App 只運(yùn)行一次的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網(wǎng)!