我正在为使用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的新手。
答案 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
文本中。