AttributeError: 'BoxLayout' 对象没有属性,textinput

按下按钮时出现问题:我总是得到下面的错误。谁能建议我如何解决这个问题?


主.py文件:


class MainApp(MDApp):




    def build(self):

        self.dati = Builder.load_file("conf.kv")

        return Builder.load_file("conf.kv")


    def show_data(self):

        print(self.boxlay.btn_nav.scr1.classe.text)


MainApp().run()

conf.kv 文件:


BoxLayout:

    orientation:'vertical'

    id: boxlay

    btn_nav:btn_nav


    MDToolbar:

        title: 'Bottom navigation'


    MDBottomNavigation:

        id: btn_nav

        scr1:scr1


        MDBottomNavigationItem:

            id: scr1

            classe:classe

            name: 'screen 1'

            text: 'Python'

            icon: 'language-python'


            MDTextField:

                id: classe

                hint_text: "Enter Class"

                pos_hint:{'center_x': 0.5, 'center_y': 0.5}

                size_hint_x:None

                width:300

            MDRectangleFlatButton:

                text: 'Python'

                pos_hint: {'center_x': 0.5, 'center_y': 0.4}

                on_release: app.show_data()

运行此代码我收到的错误是:


  on_release: app.show_data()

   File "main.py", line 27, in show_data

     print( AttributeError: 'NoneType' object has no attribute 'btn_nav')

 AttributeError: 'BoxLayout' object has no attribute 'classe'

感谢您的帮助


慕侠2389804
浏览 136回答 1
1回答

慕少森

由于您已经ids定义,您可以在 python 代码中使用它们来访问从您的kv. 所以show_data()方法可以是:def show_data(self):    print(self.root.ids.classe.text)另外,我注意到你在打电话:Builder.load_file("conf.kv")在你的方法中两次build()。虽然这不是错误,但它可能不是您想要的。该行:self.dati = Builder.load_file("conf.kv")创建由以下行创建的 GUI 的完整副本:return Builder.load_file("conf.kv")但是, 所引用的小部件树self.dati不是您的 GUI 中的小部件树,因此self.dati可能没有价值。我怀疑你的build()方法应该是:def build(self):    self.dati = Builder.load_file("conf.kv")    return self.dati
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python