如何在不同文件夹中使用.kv文件?附src与design场景示例
Kivy .kv 文件使用示例(跨文件夹场景)
项目结构
先明确你的文件夹结构,方便对应代码:
你的项目根目录/ ├─ src/ │ └─ main.py └─ design/ └─ main.kv
方法1:手动加载 .kv 文件
这是最直接的方式,在main.py里通过Builder.load_file()指定main.kv的路径。
main.py 代码
from kivy.app import App from kivy.lang import Builder from kivy.uix.boxlayout import BoxLayout # 加载design文件夹下的main.kv,若运行时工作目录不是项目根目录,建议用绝对路径 Builder.load_file("../design/main.kv") class MainLayout(BoxLayout): pass class MyApp(App): def build(self): return MainLayout() if __name__ == "__main__": MyApp().run()
main.kv 代码
<MainLayout>: orientation: "vertical" Label: text: "这是来自main.kv的内容" Button: text: "点击测试" on_press: print("按钮被点击了")
方法2:设置资源路径实现自动加载
把design文件夹添加到Kivy的资源搜索路径,让Kivy自动识别对应App类名的kv文件(需遵循Kivy的命名规则:App类名小写并去掉App后缀,对应kv文件名)。
修改后的main.py 代码
from kivy.app import App from kivy.uix.boxlayout import BoxLayout from kivy.resources import resource_add_path import os # 用绝对路径添加design文件夹到资源路径,避免工作目录变动导致的路径错误 resource_add_path(os.path.join(os.path.dirname(__file__), "../design")) # App类名设为MainApp,对应自动加载main.kv class MainApp(App): def build(self): return BoxLayout() if __name__ == "__main__": MainApp().run()
对应的main.kv 代码
<BoxLayout>: orientation: "vertical" Label: text: "自动加载的kv内容" Button: text: "自动加载测试"
注意事项
- 路径问题:如果运行
main.py时工作目录不是项目根目录,优先用os.path模块拼接绝对路径,避免路径错误。 - 命名规则:Kivy自动加载时,会匹配与App类名(小写、去掉
App后缀)一致的kv文件,比如MainApp对应main.kv,MyApp对应my.kv。
内容的提问来源于stack exchange,提问作者Mücahit Söylemez
相关产品推荐
相关产品推荐

