Kivy应用程序能否从多个.kv文件中读取?

22

我知道简单的回答可能是“不行”,但也许值得再问一次。

如果我正在编写一款有几千行代码的 Kivy 应用程序,那么是否有可能在另一个 kv 文件中编写一些类?

这将使编辑、更正错误、进行更改等操作变得轻而易举。

只是为了澄清一下 - 这些 .KV 文件将是彼此延续的 - 不是指向并行应用程序。

非常感谢专家们的见解 - 谢谢。

3个回答

33

可以的!您可以像普通Python文件一样通过以下方式开始导入.kv文件:


#:include otherfile.kv
如果您希望文件先卸载再重新加载,则可以强制执行导入类型。
#:include force otherfile.kv

这一切如Kivy语言文档所述,其中充满了有用的澄清。


5
我很久以前就停止了和Kivy的折腾,但通过文档我可以看到自从我提出问题后,1.9版本开始提供了这个选项。因此,我的问题并不是荒谬的。 - Edv Beq
你知道是否可以使用这种语法导航目录吗?例如,我可以在Python中使用from ui.myclass import MyClass导入东西,但是#:include ui.mywidget.kv不起作用。文档似乎没有提到这一点。 - Josh
5
可以的,您可以使用#: include ui/mywidget.kv - clfaster

8

好的:

from kivy.lang import Builder
Builder.load_file('your_filename')

KV规则是独立的,只要在小部件实例化之前加载规则,该小部件的规则就会应用。您可以将它们分散到任意数量的文件中,但不能将单个KV规则分成多个文件。 - inclement
我真的不理解你问题的本质。在你的例子中,应用程序将根据它们的名称加载kv文件,就像正常情况一样,但它们不会同时运行或做任何事情。 - inclement
“但它们不会同时运行或执行任何操作” - 是的,但Python可以运行并发进程。 - Edv Beq
等一下,你是在问关于多个窗口(通过多个App类)的问题,而不是kv文件吗?如果是这样,答案是否定的,那是不可能的。好吧,你可以同时运行多个应用程序并让它们通信,但kivy没有提供任何特殊的帮助。 - inclement
我所问的是,是否有可能将一个接口的信息分散在(n)个kv文件中以便于更好地阅读和编辑。 - Edv Beq
显示剩余5条评论

2
我相信你可以创建多个.kv文件,并通过这种方式在一个地方(根文件)包含,只有这样才能分发/分支你的代码。 Kivy文档明确表示:“一个kv文件最多只能包含一个根部件”,这意味着只有一个kv主文件。即使您运行Mainapp类的多个实例。 我对Kivy比较新,请纠正我如果我错了。 谢谢!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接