对象没有属性“ btn”

时间:2019-04-13 02:28:36

标签: python kivy

我正在学习教程,并尝试在.kv文件中实现按钮。 我希望能够运行main.py文件并输入名称和电子邮件信息。当我按下提交按钮时,我希望它可以将名称和电子邮件输出到控制台并清除文本输入框。按下提交按钮后,我得到AttributeError:

  

'GusApp'对象没有属性''btn'

我已经检查了缩进并验证了方法'btn'在我的主python文件中。

主要python

class Grid(Widget):
    name = ObjectProperty(None)
    email = ObjectProperty(None)

    def btn(self):

        print("Name: ", self.name.text, "email: ", self.email.text)
        self.name.text = ""
        self.email.text = ""

class GusApp(App):
    def build(self):
        return Grid()

gus.kv

name: name # global variable id name
email: email # global variable id email

GridLayout:
    cols: 1
    size: root.width - 200, root.height - 200
    pos: 100, 100

    GridLayout:
        cols: 2

        Label:
            text: "Name: "

        TextInput:
            id: name
            multiline:False

        Label:
            text: "Email: "

        TextInput:
            id: email
            multiline:False

    Button:
        text:"Submit"
        on_press: app.btn()

2 个答案:

答案 0 :(得分:0)

该错误消息表明Python正在名为btn的类中寻找属性GusApp,但是您的代码似乎在类Grid中定义了该属性。

答案 1 :(得分:0)

通过将“ on-press:app.btn()”更改为“ on-press:root.btn()”,可以使按钮正常工作。

kivy文档和Steve帮助我了解了KV规则上下文。如果您遇到类似的问题,建议您查看此链接:https://kivy.org/doc/stable/guide/lang.html?highlight=binding