将kv文件中标签的文本绑定到python文件中的方法

问题描述 投票:0回答:1

我想用简单的文字将.kv文件中的功能绑定到.py文件中的方法,我想每天在应用程序的主屏幕上更新引号,因此我使用屏幕小部件显示引号,因此如何绑定将label.text转换为.py文件中的方法这是我要绑定的.py文件的类

class MainScreen(FloatLayout):
    def quote(self):
        self.quote.text = 'I often think that the night is more alive and more richly colored than 
                             the day. - Vincent van Gogh'

这是.kv文件的根小部件

    <MainScreen>:
        story: story

        canvas:
            Color:
                rgba: 0, 0, 0, 1
            Rectangle:
                pos: self.pos
                size: self.size

        Label:
            id: story
            text: root.quote
            font_size: '20sp'
            size: self.texture_size
            pos_hint: {'x': -0.2, 'y': 0.27}

但是显示错误消息说label.text必须是字符串

python-3.x text label kivy kivy-language
1个回答
0
投票

您可以使用猕猴桃Property,并使用quote()方法更新该Property。这是在您的代码中执行此操作的一种方法:

class MainScreen(FloatLayout):
    quote_text = StringProperty('Not Set')

    def quote(self, *args):
        self.quote_text = 'I often think that the night is more alive and more richly colored than  the day. - Vincent van Gogh'

[quote_text是可以在StringProperty中引用的kv,并且quote方法现在更新了StringProperty

以及您的kv

<MainScreen>:
    story: story

    canvas:
        Color:
            rgba: 0, 0, 0, 1
        Rectangle:
            pos: self.pos
            size: self.size

    Label:
        id: story
        text: root.quote_text
        font_size: '20sp'
        size: self.texture_size
        pos_hint: {'x': -0.2, 'y': 0.27}

然后,调用quote()方法将更新Label文本。要对其进行测试,可以将build()App方法用作:

def build(self):
    main = MainScreen()
    Clock.schedule_once(main.quote, 5)
    return main
© www.soinside.com 2019 - 2024. All rights reserved.