繁体   English   中英

如何将字符串从 main.py 传递到我的 .kv

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM