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

如何在Python的home.py中获取Kivy的home.kv内组件的id?

在Kivy的Home屏幕中获取kv文件内组件的ID

先修正代码里的结构与缩进问题

你的代码有几处格式和布局错误,这些会直接导致组件无法正常加载,先改好:

修正后的 screenmanager.py

from kivy.uix.screenmanager import ScreenManager

# 别用ScreenManager当类名,和导入的类重名会出问题,改成MyScreenManager
class MyScreenManager(ScreenManager):
    pass

修正后的 screenmanager.kv

<MyScreenManager>:  
    Home:
        id: home
        name: 'home'

去掉了多余的scrn_mngrid(不需要的话可以删,保留也不影响),关键是Home的缩进要和<MyScreenManager>同级

修正后的 home.kv

<Home>:
    MDBoxLayout:
        orientation: 'vertical'
        MDLabel:
            text: "text"
        MDScrollView:  # 之前把它塞在MDLabel里了,MDLabel是文本组件,不能嵌套其他组件,必须移到MDBoxLayout下
            MDList:
                id: box

这个布局错误是核心问题,之前box这个id根本不会被注册到Home的ids字典里

然后在Home类里获取组件ID

Kivy会自动把kv里定义的id放到对应Widget的self.ids字典里,但必须等kv加载完成后再访问,不能在__init__里直接拿(此时kv还没解析完,ids是空的)。推荐两种常用方式:

方式1:用on_kv_post方法(kv加载完成后触发)

from kivymd.uix.screen import MDScreen

class Home(MDScreen):
    def on_kv_post(self, base_widget):
        # 此时kv已经加载完成,self.ids里能拿到box
        md_list = self.ids.box
        print("获取到MDList组件:", md_list)
        # 举个例子:给列表加个测试项
        from kivymd.uix.list import OneLineListItem
        md_list.add_widget(OneLineListItem(text="测试列表项"))

方式2:用on_enter方法(切换到当前屏幕时触发)

如果需要在屏幕显示时才操作组件,用这个方法更合适:

from kivymd.uix.screen import MDScreen

class Home(MDScreen):
    def on_enter(self):
        md_list = self.ids.box
        print("进入Home屏幕,获取到MDList:", md_list)
        # 在这里写你的组件操作逻辑

额外验证要点

  • 确保kv文件名正确:Home类对应的kv文件必须是小写的home.kv,并且放在screens/目录下,主程序要能加载到它
  • 主程序main.py要正确初始化,比如:
from kivy.lang import Builder
from kivymd.app import MDApp
from screenmanager import MyScreenManager

# 加载kv文件
Builder.load_file("screens/home.kv")
Builder.load_file("screenmanager.kv")

class MyApp(MDApp):
    def build(self):
        return MyScreenManager()

if __name__ == "__main__":
    MyApp().run()

内容的提问来源于stack exchange,提问作者RMCode

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 12:56:13