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

Kivy的.kv文件运行报'super' object无'__getattr__'属性错误求解

问题原因排查

你遇到的报错由两处代码错误共同导致:

  • 类继承逻辑错误:MyLayout类同时继承了Widget和App,违背Kivy的设计规范。仅主应用入口类需要继承App,布局组件类仅需继承Widget,错误的多继承会打断ids属性的初始化绑定逻辑。
  • kv文件id语法错误:kv中BoxLayout的id加了多余的双引号,Kivy的kv语法规定id不需要加引号,带引号的id无法被正确识别并写入self.ids字典。
修正后代码

Python代码

from kivy.app import App
from kivy.uix.widget import Widget
from kivy.lang import Builder
from kivy.uix.label import Label

Builder.load_file("my.kv")
# 仅继承Widget即可
class MyLayout(Widget):
    def clear(self):
        self.ids.n.text = ""
        self.ids.fp.text = ""
        self.ids.d.text = ""
    def writeD(self):
        name = self.ids.n.text
        pizza = self.ids.fp.text
        drinks = self.ids.d.text
        orders = open("order.txt","w")
        orders.write(f"Name: {name}\n")
        orders.write(f"Pizza: {pizza}\n")
        orders.write(f"Drinks: {drinks}")
        orders.close()
    def read(self):
        orders = open("order.txt","r")
        orderL = orders.read()
        self.ids.layout.add_widget(Label(text=orderL))
        orders.close()
class AwesomeApp(App):
   def build(self):
       return MyLayout()
if __name__ == '__main__':
    AwesomeApp().run()

补充:顺便给文件操作加上了close()调用,避免资源泄漏。

my.kv代码

<Button>
    font_size:20
<TextInput>
    font_size:20
<Label>
    font_size:20
<MyLayout>
    BoxLayout:
        # id去掉双引号
        id: layout
        orientation:"vertical"
        size: root.width,root.height
        padding:10
        spacing:10
        Label:
            text:"Name"
        TextInput:
            id: n
            multiline:False
        Label:
            text:"Pizza"
        TextInput:
            id: fp
            multiline:False
        Label:
            text:"Drinks"
        TextInput:
            id: d
            multiline:False
        Button:
            text:"Submit"
            on_press:root.writeD()
        Button:
            text:"Clear fields"
            on_press:root.clear()
        Button:
            text:"show orders"
            on_press:root.read()

修改后重新运行即可正常加载,所有功能均可正常触发。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 13:06:03