我制作了一个简单的应用程序,其中有两个同时运行的计时器。一个倒数,另一个倒数。
我最初尝试在Label下缩进“ text:str(round(self.a,1))”,标题中会出现错误。现在,我通过调整代码来解决此问题,如下所示(更改是在.kv文件部分的末尾进行的):
from kivy.app import App
from kivy.uix.label import Label
from kivy.animation import Animation
from kivy.properties import NumericProperty
from random import randint
from kivy.uix.boxlayout import BoxLayout
class PleaseWork(BoxLayout):
a = NumericProperty(randint(3,7))
b = NumericProperty(0)
def start(self):
self.anim = Animation(a=0, duration=self.a)
self.anim &= Animation(b=15, duration=15)
self.anim.repeat = True
self.anim.start(self)
class PleaseApp(App):
def build(self):
p = PleaseWork()
p.start()
return p
if __name__ == "__main__":
PleaseApp().run()
<PleaseWork>
orientation: 'vertical'
text_1: str(round(self.a, 1))
text_2: str(round(self.b, 1))
Label:
text: root.text_1
Label:
id: count_up
text: root.text_2
虽然代码现在可以执行预期的工作,但我的问题是为什么这可以纠正错误?我真的不明白为什么这有所作为?
答案 0 :(得分:1)
问题在于变量的范围,.kv中至少有以下几种方式访问元素:
id
:<A>:
id: a
property_a: b.foo_property
<B>:
id: b
property_b: a.bar_property
它用于引用树中的任何节点。
self
:<A>:
property_a: self.foo_property
B:
property_b: self.bar_property
使用self
时,意味着同一节点引用了自身,在上一个示例property_b: self.bar_property
中,指出了property_b
的{{1}}的属性将采用与b
中的bar_property
相同的值。它与python类中的用法相同。
b
:root
在引用树的根时使用<A>:
B:
property_b: root.bar_property
<C>:
D:
property_d: root.bar_property
,例如root
表示property_b: root.bar_property
中的property_b
将与{ b
。对于bar_property
,它表示a
的{{1}}与property_d: root.bar_property
的{{1}}具有相同的值。
考虑到上述情况,以下也是解决方案:
1。
property_d
2。
d