本文介绍了正确使用.kv文件进行Kivy并将其导入到Python脚本中的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在关注有关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脚本中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

09-24 22:58