如何在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
相关产品推荐
相关产品推荐

