Kivy значение индикатора прогресса не будет обновляться - PullRequest
0 голосов
/ 12 января 2019

Я пытаюсь запрограммировать индикатор выполнения, который отсчитывает от 60 до 0 секунд, как только открывается экран, однако я не могу понять, почему значение индикатора не обновляется.

Я полагал, что self.ids.pb.value был верным способом сделать это, что заставляет меня думать, что я совершаю ошибку в другом месте.

Заранее спасибо.

Error

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 голосов
/ 12 января 2019

Значение уже находится в классе CountDown.
Таким образом, вы можете установить значение с помощью self.value = seconds

Если вы находитесь в классе EasyMode, он будет работать с self.ids.pb.value = seconds

...