如何在Kivy中更新按钮文本

时间:2019-07-15 17:03:50

标签: python python-3.x kivy

我正在为使用Kivy的项目制作MP3播放器。我在更新Button的文本时遇到问题。

我使用并成功工作过的唯一方法是直接更新按钮文本,但是我想更新一个变量,该变量就是按钮文本的含义。

这是最小的可复制示例:

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

class FirstKivy(App):

    def __init__(self, **kwargs):
        super(FirstKivy, self).__init__(**kwargs)
        self.pausePlay = "Play"

    def build(self):
        layout = BoxLayout(orientation = "vertical")

        btn = Button(text = self.pausePlay)
        btn.bind(on_press = self.changePausePlay)

        layout.add_widget(btn)

        return layout

    def changePausePlay(self, button):
        if self.pausePlay == "Play":
            self.pausePlay = "Pause"
        elif self.pausePlay == "Pause":
            self.pausePlay = "Play"

FirstKivy().run()

我希望按钮的文本在单击时从“播放”变为“暂停”,然后再次从“暂停”变为“单击播放”。不会发送错误消息。

感谢您的帮助,我是Kivy和Python的OOP的新手。

1 个答案:

答案 0 :(得分:0)

最简单的方法是使用kv构建带有StringProperty来保存Button文本的gui:

from kivy.app import App
from kivy.lang import Builder
from kivy.properties import StringProperty

kv = '''
BoxLayout:
    orientation: 'vertical'
    Button:
        text: app.pausePlay
        on_press: app.changePausePlay(self)
'''


class FirstKivy(App):
    pausePlay = StringProperty('Play')

    def __init__(self, **kwargs):
        super(FirstKivy, self).__init__(**kwargs)

    def build(self):
        layout = Builder.load_string(kv)
        return layout

    def changePausePlay(self, button):
        if self.pausePlay == "Play":
            self.pausePlay = "Pause"
        elif self.pausePlay == "Pause":
            self.pausePlay = "Play"

FirstKivy().run()

一些关键点。 kv语言会在可能时自动设置绑定(在Python中创建相同的gui不会)。 StringProperty允许kv设置绑定,以便pausePlay中的任何更改都将反映在Button文本中。