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

如何在Kivy文件中访问类内部函数里声明的变量

KivyMD访问类方法内变量的实现方案

函数内部定义的Object_name属于Python局部变量,仅在函数运行时生效,运行结束后会被自动回收,且默认不对外暴露,因此你之前尝试的app.a_function().App_name这类写法都无法生效。

下面是三种常用的正确实现方式:

方式1:方法直接返回目标值

如果该变量仅需要在调用方法时获取最新值,直接让方法返回该变量即可:

修改后Python代码

from kivymd.app import MDApp
from kivymd.uix.boxlayout import MDBoxLayout

class MainScreen(MDBoxLayout):
    pass

class MainApp(MDApp):
    App_Name = "App Example"

    def a_function(self):
        Object_name = "this is a name"
        # 新增返回语句
        return Object_name

MainApp.run()

对应KV代码

MainScreen:
<MainScreen>:
    MDLabel:
       # 直接调用方法获取返回值
       text: app.a_function()

方式2:将变量转为App实例属性

如果该变量需要在方法执行后长期保留、供全局访问,将变量挂载到App实例上即可,后续可以和类属性App_Name一样直接访问:

修改后Python代码

from kivymd.app import MDApp
from kivymd.uix.boxlayout import MDBoxLayout

class MainScreen(MDBoxLayout):
    pass

class MainApp(MDApp):
    App_Name = "App Example"
    # 建议先给属性赋初始值,避免KV加载时方法还没执行报错
    Object_name = ""

    def a_function(self):
        # 赋值给实例属性
        self.Object_name = "this is a name"

MainApp.run()

对应KV代码

MainScreen:
<MainScreen>:
    MDLabel:
       # 直接访问实例属性
       text: app.Object_name

方式3:方法内主动更新UI控件值

如果变量是在特定触发事件(比如按钮点击、接口请求完成)后才生成,也可以在方法内直接获取UI控件赋值,无需KV绑定:

修改后Python代码

from kivymd.app import MDApp
from kivymd.uix.boxlayout import MDBoxLayout

class MainScreen(MDBoxLayout):
    pass

class MainApp(MDApp):
    App_Name = "App Example"

    def a_function(self):
        Object_name = "this is a name"
        # 主动给指定ID的Label赋值
        self.root.ids.name_label.text = Object_name

MainApp.run()

对应KV代码

MainScreen:
<MainScreen>:
    MDLabel:
       # 给Label设置id供Python侧获取
       id: name_label

内容的提问来源于stack exchange,提问作者Andrés Rodriguez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 10:45:07