AttributeError:'float'对象没有属性'root'

时间:2017-10-10 17:35:02

标签: attributes kivy clock

我有一个我无法解决的问题。

当我运行以下代码时,我收到此错误

AttributeError: 'float' object has no attribute 'root'

一切正常,直到我发布了Clock.schedule

代码:

from kivy.app import App
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.label import Label
from kivy.clock import Clock

global C
C = 0




class Example(App):
     def build(self):
          global C
          C = C + 1
          y = str(C)
          self.root = FloatLayout()
          self.label = Label(text=y, pos=(0,0), size_hint=(1.0,1.0), halign="left")


      self.label.text_size = self.label.size
      self.root.add_widget(self.label)
      return self.root
      Clock.schedule_once(build, 0.1)

Example().run()

例如:当我想更新时间时,我每隔一秒用

调用一个方法

#Clock.schedule_interval(test,1)

所以我每隔一秒调用一次方法

但是,如果我想更新时间并将其发送到带有ID时间的标签,我会得到同样的错误....

def test(self):
    z = time.strftime("%H:%M:%S")
    self.ids.time.text = (y)

Clock.schedule_interval(test,1)

我在这个项目中的目标是在每个页面上显示时间,并将不同屏幕上不同输入的状态更新为标签,例如每秒一次。

我尝试了以下命令,但我猜它不适用于多个屏幕

self.the_time.text = MyTime

1 个答案:

答案 0 :(得分:2)

build是一种方法,因此也称为self.build,它应该接受自调度以来经过的时间的浮点参数。

我假设发生的事情是该方法被称为unbound(没有隐式self),self被赋予float值,因此该方法尝试将该float用作self,这对于漂亮不起作用显而易见的原因。

TL& DR:使用Clock.schedule_once(self.build, 0.1)并将build声明更改为def build(self, dt=0):