You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在不同文件夹中使用.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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 17:15:33