2017-10-10 102 views
1

我有一个问题,我无法解决。AttributeError:'float'对象没有'root'属性

当我运行下面的代码我得到这个错误

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_in terval(测试1)

因此,我调用该方法每秒

但是,如果我想更新的时间,并将其与ID时间我得到同样的错误发送给拉布勒....

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

Clock.schedule_interval(测试1)

我在这个PROJEKT目标是要显示在每个网页上的时间和更新在不同的屏幕不同的输入的状态标贴例如每一秒。

我尝试以下命令,但我想它不为一个以上的屏幕

self.the_time.text工作=数值指明MyTime

+0

您确定要在做Clock.schedule_once()之前返回吗? – jdv

+0

我觉得它没有问题,我在我的主要项目中的很多方法有这个错误。 –

回答

1

build是一种方法,并且这样被称为self.build,也,它应该接受自调度以来经过的时间的float参数。

我假设发生了什么是该方法被称为unbound(不隐式自我)和自我被赋予该浮点值,因此该方法试图使用该浮点数作为self,这不工作的原因很明显。

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

+0

谢谢,作品像魅力。 –

+0

很高兴能听到,请问您能否将答案标记为已接受?谢谢 :) – Tshirtman