You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kivy报错:'float'对象无'ids'属性,时钟标签更新失败求助

问题解决思路

错误根源

你遇到的AttributeError: 'float' object has no attribute 'ids',核心原因有两个:

  1. Clock.schedule_interval会自动向被调度的函数传入一个delta时间参数(从上一次调用到现在的时间差,float类型),但你的currentTime方法没有定义这个参数,导致该参数被错误地当成了self。
  2. 你直接在ActiveClock类内部调用Clock.schedule_interval(currentTime, 1),此时currentTime是未绑定到实例的类方法,调度时无法正确传递self实例。

修正方案

修改你的ActiveClock类代码,调整调度时机和方法参数:

class ActiveClock(Widget):
    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        # 在实例初始化时调度更新,绑定当前实例的方法
        Clock.schedule_interval(self.currentTime, 1)
    
    def currentTime(self, dt):  # 新增dt参数接收delta时间
        timeData = time.strftime("%H:%M:%S")
        self.ids.current_time.text = timeData

关键修改点:

  • 将调度逻辑移到__init__方法中:确保在实例创建时绑定self,让Clock调用的是实例方法而非未绑定的类方法。
  • 给currentTime添加dt参数:接收Clock自动传入的delta时间,避免参数错位导致self被覆盖成float类型。

额外建议

  • 可以考虑使用kivy.clock.Clock.get_time()替代time.strftime,更贴合Kivy的异步调度机制,但当前写法也能正常工作。
  • 确保kv文件中ActiveClock下的Label确实设置了id: current_time,你的现有kv文件这部分是正确的。

内容的提问来源于stack exchange,提问作者Vulturu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 20:11:47