【问题标题】:How to efficiently load .kv files in a Kivy App如何在 Kivy 应用程序中有效地加载 .kv 文件
【发布时间】:2018-10-16 09:03:31
【问题描述】:

我正在开发一个基于 Kivy 的具有多个界面(大约 20 个屏幕)的应用程序,我想知道加载 kv 文件的最佳方式(在速度或性能方面)?

这是我想到的两种方式

案例 1

将每个kv文件加载到他对应的接口定义文件中

[interface1.py]
...
Builder.load_file("path\to\interface1.kv")

class Interface1(Screen):
    # Class definition

...


[interface2.py]
...
Builder.load_file("path\to\interface2.kv")

class Interface2(Screen):
    # Class definition

...


[main.py]
...
if __name__ == '__main__':
    MainApp().run()

...

案例 2

在运行应用程序之前加载 kv 文件

[interface1.py]
...
class Interface1(Screen):
    # Class definition

...


[interface2.py]
...
class Interface2(Screen):
    # Class definition

...


[main.py]
...
Builder.load_file("path\to\interface1.kv")
Builder.load_file("path\to\interface2.kv")

if __name__ == '__main__':
    MainApp().run()

...

【问题讨论】:

  • 两者是等价的,因为加载是在您启动应用程序时给出的。

标签: python kivy kivy-language


【解决方案1】:

我不是总是为每个新的 kv 文件编写新代码,而是像以下方法一样构建它,只需将 KV 文件放在目录中即可加载。如:

import os
from os import listdir
from os.path import isfile, join, isdir
from kivy.lang import Builder

# Gets current python dir then add the KV dir
kv_path = os.getcwd() + '/kv/'
kv_load_list = [f for f in listdir(kv_path) if isfile(join(kv_path, f))]

# Loads all KV file
for file in kv_load_list:
    if file.endswith('.kv'):
        Builder.load_file(kv_path + file)

【讨论】:

  • 如何使用glob 只获取kv 文件,这样您就不需要检查它了?喜欢[f for f in glob.glob("*.kv")]
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-06-02
  • 1970-01-01
  • 2021-01-17
  • 1970-01-01
  • 2017-03-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多