【问题标题】:How to update Button text in Kivy如何在 Kivy 中更新按钮文本
【发布时间】:2019-07-16 03:43:12
【问题描述】:

我正在使用 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 的新手。

【问题讨论】:

    标签: python python-3.x kivy


    【解决方案1】:

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

    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 文本中。

    【讨论】:

      猜你喜欢
      • 2021-11-21
      • 2015-09-01
      • 2022-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多