Kivy 进度条值不会更新
Kivy progressbar value won't update
我正在尝试编写一个进度条,它会在屏幕打开时从 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 ie 中声明值。
<EasyMode>:
CountDown:
id: pb
max:60
value: app.countdown.value
该值已经在 CountDown
class。
所以你可以设置值 self.value = seconds
如果您在 EasyMode
class 中,它将适用于 self.ids.pb.value = seconds
我正在尝试编写一个进度条,它会在屏幕打开时从 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 ie 中声明值。
<EasyMode>:
CountDown:
id: pb
max:60
value: app.countdown.value
该值已经在 CountDown
class。
所以你可以设置值 self.value = seconds
如果您在 EasyMode
class 中,它将适用于 self.ids.pb.value = seconds