我正试图在我的nexus 5上的kivy启动器中从kivy.org运行此代码。我在kivy文件夹和“android.txt”文件中创建了一个文件夹。 这是main.py:
import kivy kivy.require('1.9.0') from kivy.app import App from kivy.uix.label import Label class TestApp(App): def build(self): return Label(text='Hello World') if __name__ == '__main__': TestApp().run()当我从启动器启动它时它立即崩溃。这是我在logs文件夹中得到的:
[INFO ] Logger: Record log in /storage/emulated/0/kivy/myshit/.kivy/logs/kivy_15-05-01_6.txt [INFO ] Kivy: v1.9.0 [INFO ] Python: v2.7.2 (default, Apr 2 2015, 13:52:41) [GCC 4.8] [INFO ] Factory: 173 symbols loaded [WARNING ] stderr: /data/data/org.kivy.pygame/files/lib/python2.7/site-packages/kivy/core/image/img_pygame.py:1.3: RuntimeWarning: import cdrom: No module named cdrom [WARNING ] stderr: (ImportError: No module named cdrom) [INFO ] Image: Providers: img_tex, img_dds, img_gif, img_pygame, img_pil (img_ffpyplayer ignored) [WARNING ] stderr: Traceback (most recent call last): [WARNING ] stderr: File "main.py", line 9, in <module> [WARNING ] stderr: return Label(text='Hello World') [WARNING ] stderr: File "/home/tito/code/python-for-android/build/python-install/lib/python2.7/site-packages/kivy/app.py", line 798, in run [WARNING ] stderr: File "main.py", line 7, in build [WARNING ] stderr: class TestApp(App): [WARNING ] stderr: NameError: global name 'Label' is not defined请指导我做错了什么? PS我不编译应用程序,我只是想在启动器中运行它。 示例游戏和展示工作正常。
I'm trying to run this code from kivy.org in kivy launcher on my nexus 5. I've made a folder in kivy folder and "android.txt" file. Here's main.py:
import kivy kivy.require('1.9.0') from kivy.app import App from kivy.uix.label import Label class TestApp(App): def build(self): return Label(text='Hello World') if __name__ == '__main__': TestApp().run()When i start it from launcher it crashes instantly.And this is what I get in logs folder:
[INFO ] Logger: Record log in /storage/emulated/0/kivy/myshit/.kivy/logs/kivy_15-05-01_6.txt [INFO ] Kivy: v1.9.0 [INFO ] Python: v2.7.2 (default, Apr 2 2015, 13:52:41) [GCC 4.8] [INFO ] Factory: 173 symbols loaded [WARNING ] stderr: /data/data/org.kivy.pygame/files/lib/python2.7/site-packages/kivy/core/image/img_pygame.py:1.3: RuntimeWarning: import cdrom: No module named cdrom [WARNING ] stderr: (ImportError: No module named cdrom) [INFO ] Image: Providers: img_tex, img_dds, img_gif, img_pygame, img_pil (img_ffpyplayer ignored) [WARNING ] stderr: Traceback (most recent call last): [WARNING ] stderr: File "main.py", line 9, in <module> [WARNING ] stderr: return Label(text='Hello World') [WARNING ] stderr: File "/home/tito/code/python-for-android/build/python-install/lib/python2.7/site-packages/kivy/app.py", line 798, in run [WARNING ] stderr: File "main.py", line 7, in build [WARNING ] stderr: class TestApp(App): [WARNING ] stderr: NameError: global name 'Label' is not definedPlease guide me what do I do wrong? P.S. I don't compile app, I just wonna run it in launcher. Sample games and showcase work fine.
最满意答案
尝试这个:
import kivy kivy.require('1.9.0') from kivy.app import App from kivy.lang import Builder kv = ''' Label: text: "Hello World" ''' class TestApp(App): def build(self): return Builder.load_string(kv) if __name__ == '__main__': TestApp().run()老实说,我不知道为什么你的代码不能运行,但我还没有看到有人直接从构建方法返回一个kivy小部件(如Label或Button ),所以也许它与某些事情有关那。 从我所看到的,通常构建方法返回一个类的实例,该类是应用程序的根小部件。 该类通常似乎继承自kivy布局或Widget类本身,并封装其他所有内容,作为小部件树的根。
Try this:
import kivy kivy.require('1.9.0') from kivy.app import App from kivy.lang import Builder kv = ''' Label: text: "Hello World" ''' class TestApp(App): def build(self): return Builder.load_string(kv) if __name__ == '__main__': TestApp().run()I honestly don't know why you're code wouldn't run, but I haven't seen someone just straight-up return a kivy widget(like Label or Button) from the build method before, so perhaps it's something to do with that. From what I've seen, usually the build method returns an instance of a class that is the root widget of an app. That class often seems to either inherit from a kivy layout, or the Widget class itself, and encapsulates everything else, as the root of the widget tree.
更多推荐
发布评论