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

如何将Kivy文件中Spinner的id与产品数据库数据绑定并解决ids访问报错

问题原因

  • KV文件中id定义错误:Kivy的id属性不需要加引号,加引号会导致ids字典无法正确识别
  • 调用时机错误:Screen的__init__方法执行时,KV规则还未完成渲染,ids字典尚未生成,此时访问ids必然报错
  • 不必要的多继承:Screen本身已经继承自Widget类,重复继承Widget/FloatLayout会导致逻辑冲突
  • 未加载KV规则:若你的KV代码未保存为与App类同名的kv文件(buendes.kv),则需要手动加载KV内容

修复步骤

1. 修正KV文件的id定义

去掉所有id属性的双引号,修改后对应部分代码如下:

<SecondWindow>:
    name: "cotiza"
    FloatLayout:
        CodigoSpin:
            id: Cod_prod
            pos: 20, 100
            Label:
                text: "Descripcion"
                pos: 20, 35
        CodigoSpin:
            id: Cod_prod2
            pos: 20, 200
            Label:
                text: "Descripcion"
                pos: 20, 130
        CodigoSpin:
            id: Cod_prod3
            pos: 20, 300  
            Label:
                text: "Descripcion"
                pos: 20, 235

2. 修正SecondWindow的逻辑

去掉多余继承,把初始化Spinner的逻辑放到on_enter方法中,该方法会在切换到SecondWindow时自动执行,此时ids已经完成加载:

# 仅继承Screen即可,无需额外继承Widget
class SecondWindow(Screen):
    listcode = ListProperty([])
    
    def __init__(self, **kwargs):
        super(SecondWindow, self).__init__(**kwargs)
        # 数据库操作可以保留在__init__里提前加载数据
        conn = sqlite3.connect("inventingt.db")
        cursor = conn.cursor()
        cursor.execute("""SELECT Codigo FROM masterinv """)
        rows = cursor.fetchall()
        self.listcode = [str(t[0]) for t in rows] 
        conn.close() # 操作完成后关闭数据库连接

    # 重写on_enter方法,进入页面前给Spinner赋值
    def on_enter(self, *args):
        self.ids.Cod_prod.values = self.listcode
        # 其余Spinner也可在此处完成赋值
        # self.ids.Cod_prod2.values = xxx

3. 确保KV规则正确加载

两种方案二选一即可:

  • 把KV代码保存为buendes.kv,和主程序放在同一目录下,Kivy会自动加载同名KV文件
  • 在主程序开头引入Builder手动加载KV字符串,示例:
from kivy.lang import Builder

# 把你的全部KV代码放在下方三引号中
KV = '''
<WindowManager>:
    FirstWindow:
    SecondWindow:
# 剩余KV内容
'''
Builder.load_string(KV)

4. 修复其余多余继承问题

# 去掉多余的FloatLayout继承
class FirstWindow(Screen):
    pass

# 去掉多余的Widget继承
class WindowManager(ScreenManager):
    pass

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 03:24:03