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

如何在Kivy的kv文件中调用Python主文件的字符串

把Python字符串传递到Kivy的kv文件设置Label文本的方法

下面给你两种实用的实现方式:

方法1:借助App类的属性

kv文件可以直接通过app关键字访问当前App实例的属性,只需把字符串定义在App类中即可:

修改后的Python代码:

from kivy.app import App
from kivy.uix.boxlayout import BoxLayout

class MyApp(App):
    # 定义要传递的字符串属性
    string1 = "hi"
    def build(self):
        return TestApp()

class TestApp(BoxLayout):
    pass

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

对应的kv文件:

<TestApp>
    BoxLayout:
        Label:
            text: app.string1  # 直接引用App实例的string1属性

如果需要后续动态更新字符串,把App里的string1改成StringProperty类型即可自动同步:

from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.properties import StringProperty

class MyApp(App):
    string1 = StringProperty("hi")
    def build(self):
        return TestApp()

# 其余代码不变

方法2:利用根Widget的Property属性

如果字符串属于根布局(TestApp)的状态,推荐用Kivy的Property系统,支持自动更新:

修改后的Python代码:

from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.properties import StringProperty

class TestApp(BoxLayout):
    # 定义StringProperty类型的属性,默认值设为目标字符串
    string1 = StringProperty("hi")

class MyApp(App):
    def build(self):
        return TestApp()

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

对应的kv文件:

<TestApp>
    BoxLayout:
        Label:
            text: root.string1  # root指代当前TestApp实例,直接引用它的属性

后续要修改字符串时,只需获取TestApp实例并修改string1值,Label文本会自动更新,比如在某个按钮的回调里写:self.parent.string1 = "新文本"。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 01:40:22