[英]How do I pass a string from my main.py to my .kv
我有一个大字符串,我需要将它传递到我的 kv 文件中,以便我可以在最终应用程序中将其打印为标签。 唯一的问题是我不知道如何。 我一直在网上寻找,但找不到可以集成到我的代码中的可行解决方案。
这是包含字符串的类(“lipoNames”是我想作为标签打印的内容):
class RecordData(Screen):
with open("Lipo names.txt") as f:
lineList = f.readlines()
lipoNames = ("".join(map(str, lineList)))
由于我正在使用多个菜单,因此我已经使用构建器在课堂外打开了 kv 文件。 您将在下面找到我的 kv 文件的一部分,其中将放置标签:
<RecordData>
name: "record"
Label:
text: ???
font_size: (root.width**2 + root.height**2) / 13**4
pos_hint:{"x": 0.325, "y": 0.86}
size_hint:0.35, 0.15
这是我使用 kv 的第一个项目,所以我对使用 kv 文件仍然很陌生。 感谢您的帮助!
在这种情况下,您可以将 .kv 文件写入 python 文件的变量中,您只需使用 f"{}" 来传递字符串示例
text = ""
a = f"""
<RecordData>
name: {text}
Label:
text: ???
font_size: (root.width**2 + root.height**2) / 13**4
pos_hint:{"x": 0.325, "y": 0.86}
size_hint:0.35, 0.15
"""
希望它会有所帮助
您可以在 kv 语言中调用 root.yourvariable(它的作用类似于 self.yourvariable),然后在您的相关类函数中调用 Kivy StringProperty 类型到您的变量,因此不需要类型转换,并且 Kivy 知道如何处理变量。
试试下面的这个函数,每次点击标签时都会更新文本:
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.label import Label
from kivy.app import App
from kivy.properties import StringProperty
from kivy.lang import Builder
a = """
<RecordData>
Label:
text: root.variabletext
font_size: (root.width**2 + root.height**2) / 13**4
size_hint:0.35, 0.15
pos_hint:{"x": 0.325, "y": 0.86}
"""
Builder.load_string(a)
class RecordData(FloatLayout):
variabletext = StringProperty("example")
num = 0
def on_touch_down(self, touch):
self.variabletext = "We changed "+str(self.num)+" many times"
self.num += 1
class ExampleApp(App):
def build(self):
return RecordData()
if __name__ == '__main__':
ExampleApp().run()
同样,您可以在 KV 语言中为标签指定一个 id,然后调用该 id 并在您的相关 python 类函数中设置 text 属性,示例如下:
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.label import Label
from kivy.app import App
from kivy.lang import Builder
a = """
<RecordData>
Label:
id: variabletext
text: "example"
font_size: (root.width**2 + root.height**2) / 13**4
size_hint:0.35, 0.15
pos_hint:{"x": 0.325, "y": 0.86}
"""
Builder.load_string(a)
class RecordData(FloatLayout):
num = 0
def on_touch_down(self, touch):
self.ids.variabletext.text = "We changed "+str(self.num)+" many times"
self.num += 1
class ExampleApp(App):
def build(self):
return RecordData()
if __name__ == '__main__':
ExampleApp().run()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.