Kivy / Python: NameError name 'fcn' не определено - PullRequest
0 голосов
/ 28 апреля 2020

Я не уверен, почему я получаю NameError, когда мой код содержит то же имя? Вот код Я считаю, что weightValue должно перейти от onBtnPress к fcn (). Я что-то здесь упускаю?

Ошибка NameError: имя 'fcn' не определено

weightValue = ""
class keypad(App):

    def onBtnPress(self, btn):
        global weightValue

        if btn.text == "Clear":
            weightValue = weightValue[:-10]

        elif btn.text == "Enter":
            print("the value has be sent")
            #send value to weight calculator

        else:
            weightValue = weightValue + btn.text
            fcn(weightValue)
            #send value to label

    def fcn(self, weightValue):
        print(weightValue)


    def build(self):
        layout = GridLayout(cols=2)
        # , spacing=15, padding=15, row_default_height=40
        # Make the background gray:
        with layout.canvas.before:
                Color(.2,.2,.2,1)
                self.rect = Rectangle(size=(800,600), pos=layout.pos)

        leftBox = GridLayout(cols=2)

        lblweight = Label(text='Weight in pounds: ')
        weightValuelbl = Label(text=weightValue)

        leftBox.add_widget(lblweight)

        leftBox.add_widget(weightValuelbl)


        rightBox = GridLayout(cols=3)

        _list = [1, 2, 3, 4, 5, 6, 7, 8, 9, "Clear", 0, "Enter"]
        for num in _list:
            rightBox.add_widget(Button(text=str(num), on_release=self.onBtnPress))

        layout.add_widget(leftBox)
        layout.add_widget(rightBox)

        return layout

if __name__ == '__main__':
    keypad().run()

1 Ответ

0 голосов
/ 28 апреля 2020

Вы пытались вызвать общую функцию fcn, но такой функции нет. У вас есть метод экземпляра с таким именем, но это не то, что вы назвали. Пожалуйста, просмотрите ваше руководство по классам и методам. Чтобы исправить это, вам нужно сделать одно из двух:

Правильно вызвать метод вашего экземпляра, например

self.fcn(weightValue)

- или -

Функция перемещения fcn вне класса, где она станет «нормальной» функцией.

Обратите внимание, что вы не использовали self в функции; почему fcn внутри класса вообще? Как отмечалось в предыдущем ответе, поскольку все, что вы сделали, - это сделали ограниченный (однозначный) вызов print, это, похоже, бесполезно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...