Kivy Progressbar值不会更新

时间:2019-01-12 18:52:02

标签: python-3.x kivy kivy-language

我正在尝试编写一个进度条,该进度条在屏幕打开时会从60秒倒计时到0秒,但是我无法弄清楚为什么进度条的值没有更新。

我相信self.ids.pb.value是执行此操作的有效方法,这使我认为自己在其他地方犯了错误。

谢谢。

错误

KeyError: 'pb'
AttributeError: 'super' object has no attribute '__getattr__'

.py文件

from kivy.app import App
from kivy.lang import Builder
from kivy.uix.button import Button
from kivy.uix.screenmanager import ScreenManager, Screen, CardTransition
from kivy.uix.progressbar import ProgressBar

class CountDown(ProgressBar):

    def count(self):
        self.ids.pb.value = 60
        seconds = 60
        def count_it(seconds):
            if seconds == 0:
                return
            seconds -= 1
            self.ids.pb.value = seconds
            Clock.schedule_once( lambda dt: count_it(seconds), 1)
        Clock.schedule_once( lambda dt: count_it(60), 1)

class EasyMode(Screen):
    pass

class TutorialEasy(Screen):
    pass

class GIFapp(App):
countdown = CountDown()
def build(self):
    return Builder.load_file("testkivy.kv")

Kv文件

<TutorialEasy>:
    Button:
        on_release: app.countdown.count()
        on_release: app.root.current = "EasyMode"

<EasyMode>:
    CountDown:
        id: pb
        max:60

更新

错误修复后,值就没有更新,因为我错过了用Kv lang即声明值的方法。

<EasyMode>:
        CountDown:
            id: pb
            max:60
            value: app.countdown.value

1 个答案:

答案 0 :(得分:0)

该值已经在CountDown类中。
因此,您可以使用self.value = seconds

设置值

如果您在EasyMode类中,那么它将与self.ids.pb.value = seconds一起使用