Объект не имеет атрибута ‘btn’

#python #kivy

#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()
  

Комментарии:

1. Попробуйте изменить on_press: app.btn() на on_press: root.btn()

Ответ №1:

Сообщение об ошибке предполагает, что Python ищет атрибут btn в названном классе GusApp , но ваш код, похоже, определяет этот атрибут в классе Grid .

Ответ №2:

Удалось заставить кнопку работать, изменив ‘on-press: app.btn ()’ на ‘on-press: root.btn ()’.

Документация kivy и Стив помогли мне понять контекст правила KV. Я рекомендую посмотреть на эту ссылку, если у вас возникли подобные проблемы: https://kivy.org/doc/stable/guide/lang.html ?выделить = привязка