AttributeError: 'Programa' object has no attribute 'root'

AttributeError: 'Programa' object has no attribute 'root'

我想制作一个单屏应用程序。我有 3 个文本字段和一个按钮。我无法从文本字段中获取值。

这是我的 main.py 文件

from kivymd.app import MDApp
from kivymd.uix.boxlayout import MDBoxLayout

class Programa(MDBoxLayout):
    def calcular(self):
        print("O valor de soma é {}".format(self.root.ids.namee.text))


class TesteApp(MDApp):
    def build(self):
        pass

TesteApp().run()

这是我的TesteApp.kv

Programa:

    MDGridLayout:
        cols: 1

        MDToolbar:
            title: "SDK Calc"
            left_action_items: [["menu", lambda x: app.callback()]]


        MDGridLayout:
            cols: 1
            padding: [22,32]

            MDTextField:
                id: soma
                hint_text: "Soma"

            MDTextField:
                hint_text: "Digitos"

            MDTextField:
                hint_text: "Exceção"

            MDFillRoundFlatIconButton:
                text: "Calcular"
                icon: "calculator-variant-outline"
                on_release: root.calcular()
                pos_hint: {"center_x": .5, "center_y": .5}

我遇到了错误。

   File "/python/kivymd/main.py", line 6, in calcular
     print("O valor de soma é {}".format(self.root.ids.namee.text))
 AttributeError: 'Programa' object has no attribute 'root'

我做错了什么?

要从您的 App class 访问小部件,您需要使用 self.root.ids.blablabla...,但在其他 class 中访问您的小部件,故事是这样的: 您使用 self.ids.blablabla... 代替:

class Programa(MDBoxLayout):
    def calcular(self):
        print("O valor de soma é {}".format(self.ids.namee.text))

另一个注意事项是,虽然我的回答应该是正确的,但您可能想重新检查您的 kivy 代码,因为我在那里没有看到任何名为 namee 的小部件(当然,如果 namee 是它如何不起作用的示例然后就可以了)