问题描述
我正在关注有关Kivy的教程,并且我无法从.kv文件正确加载属性.出于某种原因,有时我可以通过for kv in listdir(kv_path): Builder.load_file(kv_path+kv)
提取.kv文件,但是我不能仅仅通过将kv文件放在相同的根目录中并让其自行导入?"来做到这一点.
I am following tutorials for Kivy and I haven't been able to properly load properties from .kv files. For some reason, I am able to sometimes pull .kv files via a for kv in listdir(kv_path): Builder.load_file(kv_path+kv)
, but I can't do it by simply putting the kv files in the same root directory and letting it "import by itself?"
例如,使用文件时:
main.py
As an example, when using the files:
main.py
from kivy.app import App
from kivy.uix.label import Label
from kivy.uix.widget import Widget
class Widgets(Widget):
pass
class SimpleKivy3(App):
def build(self):
return Widgets()
if __name__ == "__main__":
SimpleKivy3().run()
SimpleKivy3.kv
SimpleKivy3.kv
<Button>:
font_size: 40
size: 170,75
color: 0,1,0,1
<Widgets>:
Button:
pos: root.x, root.top - self.height
text: "Kivy"
Button:
pos: 170,0
text: "Tutorials"
我在终端上获得以下输出:
I obtain the following output on my Terminal:
$ python main.py
[INFO ] [Logger ] Record log in /home/nickshu/.kivy/logs/kivy_18-09-12_58.txt
[INFO ] [Kivy ] v1.11.0.dev0, git-038acbf, 20180912
[INFO ] [Python ] v3.6.5 |Anaconda, Inc.| (default, Apr 29 2018, 16:14:56)
[GCC 7.2.0]
[INFO ] [Factory ] 195 symbols loaded
[INFO ] [Image ] Providers: img_tex, img_dds, img_sdl2, img_pil, img_gif (img_ffpyplayer ignored)
[INFO ] [Text ] Provider: sdl2
[INFO ] [Window ] Provider: sdl2(['window_egl_rpi'] ignored)
[INFO ] [GL ] Using the "OpenGL" graphics system
[INFO ] [GL ] Backend used <gl>
[INFO ] [GL ] OpenGL version <b'3.0 Mesa 18.0.5'>
[INFO ] [GL ] OpenGL vendor <b'Intel Open Source Technology Center'>
[INFO ] [GL ] OpenGL renderer <b'Mesa DRI Intel(R) HD Graphics P630 (Kaby Lake GT2) '>
[INFO ] [GL ] OpenGL parsed version: 3, 0
[INFO ] [GL ] Shading version <b'1.30'>
[INFO ] [GL ] Texture max size <16384>
[INFO ] [GL ] Texture max units <32>
[INFO ] [Window ] auto add sdl2 input provider
[INFO ] [Window ] virtual keyboard not allowed, single mode, not docked
[INFO ] [ProbeSysfs ] device match: /dev/input/event6
[INFO ] [MTD ] Read event from </dev/input/event6>
[INFO ] [Base ] Start application main loop
[INFO ] [MTD ] </dev/input/event6> range position X is 1266 - 5676
[INFO ] [MTD ] </dev/input/event6> range position Y is 1094 - 4762
[INFO ] [MTD ] </dev/input/event6> range touch major is 0 - 0
[INFO ] [MTD ] </dev/input/event6> range touch minor is 0 - 0
[INFO ] [MTD ] </dev/input/event6> range pressure is 0 - 255
[INFO ] [MTD ] </dev/input/event6> axes invertion: X is 0, Y is 0
[INFO ] [MTD ] </dev/input/event6> rotation set to 0
将显示以下窗口!
有人知道我在做什么错吗?这些是我对/dev/input/event6
Does anyone know what am I doing wrong? These are my permissions for /dev/input/event6
crwxrwxr-- 1 root input 13, 70 Sep 11 23:47 /dev/input/event6
非常感谢您!
推荐答案
根据文档,您有2种可能性:
According to the docs you have 2 possibilities:
Kivy用小写字母查找与您的App类同名的Kv文件,如果以"App"结尾的则减去"App",例如:
Kivy looks for a Kv file with the same name as your App class in lowercase, minus "App" if it ends with ‘App’ e.g:
MyApp-> my.kv
MyApp -> my.kv
如果此文件定义了Root Widget,它将附加到应用程序的root属性,并用作应用程序小部件树的基础.
If this file defines a Root Widget it will be attached to the App’s root attribute and used as the base of the application widget tree.
因此,您必须将.kv的名称更改为小写,并将App类的名称更改为以App结尾:
So you must change the name of the .kv to lowercase, and change the name of class App to end in App:
simplekivy3.kv
<Button>:
font_size: 40
size: 170,75
color: 0,1,0,1
<Widgets>:
Button:
pos: root.x, root.top - self.height
text: "Kivy"
Button:
pos: 170,0
text: "Tutorials"
*.py
from kivy.app import App
from kivy.uix.widget import Widget
class Widgets(Widget):
pass
class SimpleKivy3App(App):
def build(self):
return Widgets()
if __name__ == "__main__":
SimpleKivy3App().run()
2.
Builder.load_file('path/to/file.kv')
Builder.load_file('path/to/file.kv')
from kivy.app import App
from kivy.uix.widget import Widget
from kivy.lang import Builder
class Widgets(Widget):
pass
Builder.load_file('SimpleKivy3.kv')
class SimpleKivy3(App):
def build(self):
return Widgets()
if __name__ == "__main__":
SimpleKivy3().run()
这篇关于正确使用.kv文件进行Kivy并将其导入到Python脚本中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!