首页 > 解决方案 > 如何修复“AttributeError:'super'对象没有属性'__getattr__'”错误

问题描述

我正在制作一个应用程序,我最近添加了一个允许用户输入图像文件的功能,在通过应用程序代码添加之前我无数次测试了这个功能,它运行良好,但由于某种原因,它不适用于我的代码,在我实施之后。我不断收到AttributeError: 'super' object has no attribute '__getattr__'错误我不知道问题是什么,我已经标记了我添加新功能(当然是代码)的位置。请我真的很感激任何帮助,非常感谢。

这是我的 .py 文件:

from plyer import filechooser

from kivymd.app import MDApp
from kivy.uix.screenmanager import ScreenManager, Screen, NoTransition
from kivy.core.window import Window

Window.size = (300, 530)


class MainScreen(Screen):
    pass


class LessonsScreen(Screen):
    pass


class ProgressTrackerScreen(Screen):
    pass


class VisualProgress(Screen):
    pass


class Exercise_PlanScreen(Screen):
    pass


class Meal_PlanScreen(Screen):
    pass


class RecipesScreen(Screen):
    pass


class ScienceScreen(Screen):
    pass


class ArchiveScreen(Screen):
    pass


class Grocery_ListScreen(Screen):
    pass


class FaqScreen(Screen):
    pass


class Contact_InfoScreen(Screen):
    pass


class KetoApp(MDApp):

    def build(self):
        # self.theme_cls.primary_palette = 'Gray'
        # self.theme_cls.primary_hue = '200'
        # self.theme_cls.theme_style = 'Dark'  # change to Light
        self.sm = ScreenManager(transition=NoTransition())
        self.sm.add_widget(MainScreen(name="main_screen"))
        self.sm.add_widget(WhatIsKetoScreen(name='what_is_keto_screen'))
        self.sm.add_widget(WhatToEatScreen(name='what_to_eat_screen'))
        self.sm.add_widget(WhyTryKetoScreen(name='why_try_keto_screen'))

        self.sm.add_widget(LessonsScreen(name='lessons_screen'))
        self.sm.add_widget(KetoCompleteGuideScreen(name='keto_complete_guide_screen'))
        self.sm.add_widget(KetoOver40(name='keto_over_40_screen'))
        self.sm.add_widget(KetoOnaBudget(name='keto_on_a_budget_screen'))
        self.sm.add_widget(CarbsPerDay(name='carbs_per_day_screen'))
        self.sm.add_widget(HowtoEnterKetosis(name='how_to_enter_ketosis_screen'))
        self.sm.add_widget(SupplementsOnKeto(name='supplements_screen'))
        self.sm.add_widget(MacrosandExercising(name='macros_and_exercising_screen'))
        self.sm.add_widget(FastingOnKeto(name='fasting_screen'))
        self.sm.add_widget(VeganKeto(name='vegan_keto_screen'))
        self.sm.add_widget(DairyFreeKeto(name='dairy_free_keto_screen'))
        self.sm.add_widget(FastFoodEatingOutOnKeto(name='fast_food_eating_out_screen'))

        self.sm.add_widget(GettingStartedScreen(name="getting_started_screen"))
        self.sm.add_widget(WhatToKnowBeforeScreen(name="what_to_know_before_screen"))
        self.sm.add_widget(WhatToDoBeforeScreen(name="what_to_do_before_screen"))
        self.sm.add_widget(HowToStartScreen(name="how_to_start_screen"))

        self.sm.add_widget(ProgressTrackerScreen(name="progress_tracker_screen"))
        self.sm.add_widget(ProgressLogScreen(name="progresslog_screen"))
        self.sm.add_widget(ProgressCalendar(name="progress_calendar"))
        self.sm.add_widget(VisualProgress(name="visual_progress"))

        self.sm.add_widget(Exercise_PlanScreen(name="exercise_plan_screen"))
        self.sm.add_widget(Meal_PlanScreen(name="meal_plan_screen"))
        self.sm.add_widget(RecipesScreen(name="recipes_screen"))
        self.sm.add_widget(ScienceScreen(name="science_screen"))
        self.sm.add_widget(ArchiveScreen(name="archive_screen"))
        self.sm.add_widget(Grocery_ListScreen(name="grocery_list_screen"))
        self.sm.add_widget(FaqScreen(name="faq_screen"))
        self.sm.add_widget(Contact_InfoScreen(name="contact_info_screen"))

        return self.sm

    def change_screen(self, screen):
        self.sm.current = screen

    def change_screen_item(self, nav_item):
        # change to the MainScreen and switch to the specified MDBottomNavigationItem
        bottom_nav_screen = self.sm.get_screen('main_screen')
        bottom_nav_screen.ids.bottom_nav.switch_tab(nav_item)
        self.sm.current = 'main_screen'

    # The rest of the .py file is among the new feature (code)
    def file_chooser1(self):
        filechooser.open_file(on_selection=self.selected1)

    def file_chooser2(self):
        filechooser.open_file(on_selection=self.selected2)

    def selected1(self, selection1):
        self.root.ids.img1.source = selection1[0]

    def selected2(self, selection2):
        self.root.ids.img2.source = selection2[0]


KetoApp().run()

这是我的 .kv 代码:

ScreenManager:
<MyTile@SmartTileWithLabel>
    size_hint_y: None
    height: "240dp"

<MainScreen>

    MDBottomNavigation:
        id: bottom_nav
        # panel_color: .2, .2, .2, 1

        MDBottomNavigationItem:
            name: "intro_screen"
            text: 'home'
            icon: 'home'
            elevation: dp(8)

            BoxLayout:
                orientation: "vertical"
                md_bg_color: (185/255, 185/255, 185/255, 1)

                MDToolbar:
                    id: intro_screen_toolbar
                    title: "[size=32][font=Tahoma]Keto 2.0[/font][/size]" # [color=#09D7F3]
                    elevation: "8dp"


                    # find a font this fits this intro, properly
                ScrollView:
                    MDGridLayout:
                        cols: 1
                        adaptive_height: True
                        # orientation: 'vertical'
                        spacing: 25
                        padding: [25, 60, 25, 60]

                        MDLabel:
                            size_hint_y: None
                            size: self.texture_size
                            markup: True
                            halign: 'center'
                            # theme_text_color: "Secondary"
                            padding_y: 20
                            text:
                                """[b][size=25]What is Keto diet?[/size][/b]\n
                                [i]3 Months From Now, You Will Thank Yourself.[/i]"""

        MDBottomNavigationItem:
            name: "lessons_screen"
            text: 'Lessons'
            icon: 'book-lock-open'
            elevation: 8

            BoxLayout:
                orientation: "vertical"
                md_bg_color: (240/255, 240/255, 240/255, 1)

                MDToolbar:
                    id: lessons_screen_toolbar
                    title: "Lessons"
                    # left_action_items: [['keyboard-backspace', lambda x: app.change_screen_item('intro_screen')]]
                    elevation: "8dp"

                ScrollView:
                    MDGridLayout:
                        cols: 1
                        adaptive_height: True
                        # orientation: 'vertical'
                        spacing: 25
                        padding: [25, 25]

                        MDLabel:
                            # the size_hint_y: None, size: self.texture_size makes scrolling possible
                            size_hint_y: None
                            size: self.texture_size
                            markup: True
                            halign: 'center'
                            padding_y: 20
                            text:
                                '''[b]BELIEVE [i]YOU[/i] CAN, AND YOU WILL!![/b]'''

        MDBottomNavigationItem:
            name: "success_screen"
            text: 'Stories'
            icon: 'account-group'
            elevation: 8

            BoxLayout:
                orientation: "vertical"
                md_bg_color: (240/255, 240/255, 240/255, 1)

                MDToolbar:
                    id: success_screen_toolbar
                    title: "Success Stories"
                    right_action_items: [["progress-clock", lambda x: app.change_screen('progress_tracker_screen')]] #link to progress screen
                    elevation: "8dp"

                #continuation of the imagelist
                ScrollView:
                    MDGridLayout:
                        cols: 1
                        adaptive_height: True
                        padding: dp(4), dp(0)
                        spacing: dp(8)

        MDBottomNavigationItem:
            name: "menu_screen"
            text: 'Menu'
            icon: 'menu'
            elevation: 8

            BoxLayout:
                orientation: "vertical"
                md_bg_color: (240/255, 240/255, 240/255, 1)

                MDToolbar:
                    id: menu_screen_toolbar
                    title: "Menu"
                    elevation: "8dp"

                ScrollView:
                    MDList:
                        OneLineIconListItem:
                            text: "Exercise Plan"
                            ripple_behavior: True
                            on_release:
                                app.root.current = "exercise_plan_screen"
                            IconLeftWidget:
                                icon: "weight-lifter"
                        OneLineIconListItem:
                            text: "Meal Plan"
                            ripple_behavior: True
                            on_release:
                                app.root.current = "meal_plan_screen"
                            IconLeftWidget:
                                icon: "food"
                        OneLineIconListItem:
                            text: "Recipes"
                            ripple_behavior: True
                            on_release:
                                app.root.current = "recipes_screen"
                            IconLeftWidget:
                                icon: "food-turkey"
                        OneLineIconListItem:
                            text: "Studies and Science"
                            ripple_behavior: True
                            on_release:
                                app.root.current = "science_screen"
                            IconLeftWidget:
                                icon: "hospital-box"
                        OneLineIconListItem:
                            text: "Archive"
                            ripple_behavior: True
                            on_release:
                                app.root.current = "archive_screen"
                            IconLeftWidget:
                                icon: "archive"
                        OneLineIconListItem:
                            text: "Grocery List"
                            ripple_behavior: True
                            on_release:
                                app.root.current = "grocery_list_screen"
                            IconLeftWidget:
                                icon: "shopping"
                        OneLineIconListItem:
                            text: "FAQs"
                            ripple_behavior: True
                            on_release:
                                app.root.current = "faq_screen"
                            IconLeftWidget:
                                icon: "chat-question"
                        OneLineIconListItem:
                            text: "Talk To Us"
                            ripple_behavior: True
                            on_release:
                                app.root.current = "contact_info_screen"
                            IconLeftWidget:
                                icon: "email-mark-as-unread"





<ProgressTrackerScreen>
    name: 'progress_tracker_screen'

    BoxLayout:
        orientation: 'vertical'
        md_bg_color: (240/255, 240/255, 240/255, 1)

        MDToolbar:
            id: progress_tracker_screen_toolbar
            title: "Progress Tracker"
            left_action_items: [["keyboard-backspace", lambda x: app.change_screen_item('success_screen')]]
            elevation: "8dp"

        ScrollView:
            MDGridLayout:
                cols: 1
                adaptive_height: True
                spacing: dp(25)
                padding: dp(25), dp(35), dp(25), dp(45)

                MDCard:
                    ripple_behavior: True
                    orientation: 'vertical'
                    size_hint_y: None
                    size: "250dp", "220dp"
                    elevation: 15
                    radius: 15
                    on_release:
                        app.root.current = 'visual_progress'
                    Image:
                        allow_stretch: True
                        keep_ratio: False
                        size_hint_y: .8
                        source: "C:/Users/user/Downloads/bella_baron.jpg"
                    MDLabel:
                        text: 'Visual Progress'
                        halign: 'center'
                        size_hint_y: .2

# this and the code in the .py file are the new feature
<VisualProgress>
    name: 'visual_progress'

    BoxLayout:
        orientation: 'vertical'
        img1: img1
        img2: img2

        MDToolbar:
            id: visual_progress_toolbar
            title: 'Visual Progress'
            left_action_items: [['keyboard-backspace', lambda x: app.change_screen('progress_tracker_screen')]]

        ScrollView:
            MDGridLayout:
                cols: 2
                adaptive_height: True
                spacing: (10, 15)
                padding: [25, 25]

                MDLabel:
                    halign: 'center'
                    text: 'Before'

                MDLabel:
                    halign: 'center'
                    text: 'Now'

                MDCard:
                    ripple_behavior: True
                    orientation: 'vertical'
                    size_hint_y: None
                    size: 120, 220
                    elevation: 15
                    radius: 8
                    MDIconButton:
                        icon: "camera-outline"
                        user_font_size: "24sp"
                        theme_text_color: "Secondary"
                        pos_hint: {"center_x": .5, "center_y": .5}
                        on_release: app.file_chooser1()
                    Image:
                        id: img1
                        allow_stretch: True
                        keep_ratio: False

                MDCard:
                    ripple_behavior: True
                    orientation: 'vertical'
                    size_hint_y: None
                    size: 120, 220
                    elevation: 15
                    radius: 8
                    MDIconButton:
                        icon: "camera-outline"
                        user_font_size: "24sp"
                        theme_text_color: "Secondary"
                        pos_hint: {"center_x": .5, "center_y": .9}
                        on_release: app.file_chooser2()
                    Image:
                        id: img2
                        allow_stretch: True
                        keep_ratio: False


                MDTextField:
                    hint_text: 'Date'
                    width: 100

                MDTextField:
                    hint_text: 'Date'
                    width: 100

                MDTextField:
                    hint_text: 'Weight'
                    width: 80

                MDTextField:
                    hint_text: 'Weight'
                    width: 80


<Contact_InfoScreen>
    name: "contact_info_screen"

    BoxLayout:
        orientation: 'vertical'

        MDToolbar:
            id: contact_info_screen_toolbar
            title: 'Contact Info'
            left_action_items: [['keyboard-backspace', lambda x: app.change_screen_item('menu_screen')]]
            elevation: "8dp"

        ScrollView:
            MDLabel:
                size_hint_y: None
                size: self.texture_size
                padding: [15, 10]
                markup: True
                text:
                    """Thank you for using Keto 2.0\n
                    We'd love to hear from you.
                    What would you want us to improve, add or remove, reach us @ \n

                    [i][size=17]PS[/size]\n
                    Do you have a success story you want to share on this blog? Send it (photos appreciated) to _@gmail.com, and please let me know if it’s OK to publish your photo and name or if you’d rather remain anonymous.\n

                    It would also be greatly appreciated if you shared what you eat in a typical day, whether you fast etc.[/i]
                    """

我真的很感谢您抽出宝贵的时间来解决这个问题。

编辑 回溯:

[INFO   ] [Logger      ] Record log in C:\Users\user\.kivy\logs\kivy_21-10-24_2.txt
[INFO   ] [deps        ] Successfully imported "kivy_deps.angle" 0.3.0
[INFO   ] [deps        ] Successfully imported "kivy_deps.glew" 0.3.0
[INFO   ] [deps        ] Successfully imported "kivy_deps.sdl2" 0.3.1
[INFO   ] [Kivy        ] v2.0.0
[INFO   ] [Kivy        ] Installed at "C:\Users\user\AppData\Local\Programs\Python\Python39\lib\site-packages\kivy\__init__.py"
[INFO   ] [Python      ] v3.9.2rc1 (tags/v3.9.2rc1:4064156, Feb 17 2021, 11:25:18) [MSC v.1928 64 bit (AMD64)]
[INFO   ] [Python      ] Interpreter at "C:\Users\user\AppData\Local\Programs\Python\Python39\python.exe"
[INFO   ] [KivyMD      ] 0.104.2.dev0 (installed at "C:\Users\user\Desktop\Projects\KetoApp\kivymd\__init__.py")
[INFO   ] [Factory     ] 186 symbols loaded
[INFO   ] [Image       ] Providers: img_tex, img_dds, img_sdl2, img_pil (img_ffpyplayer ignored)
[INFO   ] [Text        ] Provider: sdl2
[INFO   ] [Window      ] Provider: sdl2
[INFO   ] [GL          ] Using the "OpenGL" graphics system
[INFO   ] [GL          ] GLEW initialization succeeded
[INFO   ] [GL          ] Backend used <glew>
[INFO   ] [GL          ] OpenGL version <b'4.0.0 - Build 10.18.10.4425'>
[INFO   ] [GL          ] OpenGL vendor <b'Intel'>
[INFO   ] [GL          ] OpenGL renderer <b'Intel(R) HD Graphics'>
[INFO   ] [GL          ] OpenGL parsed version: 4, 0
[INFO   ] [GL          ] Shading version <b'4.00 - Build 10.18.10.4425'>
[INFO   ] [GL          ] Texture max size <16384>
[INFO   ] [GL          ] Texture max units <16>
[INFO   ] [Window      ] auto add sdl2 input provider
[INFO   ] [Window      ] virtual keyboard not allowed, single mode, not docked
[INFO   ] [GL          ] NPOT texture support is available
[INFO   ] [Base        ] Start application main loop
[INFO   ] [Base        ] Leaving application in progress...
 Traceback (most recent call last):
   File "kivy\properties.pyx", line 861, in kivy.properties.ObservableDict.__getattr__
 KeyError: 'img1'
 
 During handling of the above exception, another exception occurred:
 
 Traceback (most recent call last):
   File "C:\Users\user\Desktop\Projects\KetoApp\main.py", line 309, in <module>
     KetoApp().run()
   File "C:\Users\user\AppData\Local\Programs\Python\Python39\lib\site-packages\kivy\app.py", line 950, in run
     runTouchApp()
   File "C:\Users\user\AppData\Local\Programs\Python\Python39\lib\site-packages\kivy\base.py", line 582, in runTouchApp
     EventLoop.mainloop()
   File "C:\Users\user\AppData\Local\Programs\Python\Python39\lib\site-packages\kivy\base.py", line 347, in mainloop
     self.idle()
   File "C:\Users\user\AppData\Local\Programs\Python\Python39\lib\site-packages\kivy\base.py", line 391, in idle
     self.dispatch_input()
   File "C:\Users\user\AppData\Local\Programs\Python\Python39\lib\site-packages\kivy\base.py", line 342, in dispatch_input
     post_dispatch_input(*pop(0))
   File "C:\Users\user\AppData\Local\Programs\Python\Python39\lib\site-packages\kivy\base.py", line 308, in post_dispatch_input
     wid.dispatch('on_touch_up', me)
   File "kivy\_event.pyx", line 709, in kivy._event.EventDispatcher.dispatch
   File "C:\Users\user\Desktop\Projects\KetoApp\kivymd\uix\behaviors\ripple_behavior.py", line 296, in on_touch_up
     return super().on_touch_up(touch)
   File "C:\Users\user\Desktop\Projects\KetoApp\kivymd\uix\button.py", line 982, in on_touch_up
     return super().on_touch_up(touch)
   File "C:\Users\user\AppData\Local\Programs\Python\Python39\lib\site-packages\kivy\uix\behaviors\button.py", line 179, in on_touch_up
     self.dispatch('on_release')
   File "kivy\_event.pyx", line 705, in kivy._event.EventDispatcher.dispatch
   File "kivy\_event.pyx", line 1248, in kivy._event.EventObservers.dispatch
   File "kivy\_event.pyx", line 1132, in kivy._event.EventObservers._dispatch
   File "C:\Users\user\AppData\Local\Programs\Python\Python39\lib\site-packages\kivy\lang\builder.py", line 57, in custom_callback
     exec(__kvlang__.co_value, idmap)
   File "C:\Users\user\Desktop\Projects\KetoApp\keto.kv", line 264, in <module>
     on_release: app.file_chooser1()
   File "C:\Users\user\Desktop\Projects\KetoApp\main.py", line 296, in file_chooser1
     filechooser.open_file(on_selection=self.selected1)
   File "C:\Users\user\AppData\Local\Programs\Python\Python39\lib\site-packages\plyer\facades\filechooser.py", line 50, in open_file
     return self._file_selection_dialog(mode="open", *args, **kwargs)
   File "C:\Users\user\AppData\Local\Programs\Python\Python39\lib\site-packages\plyer\platforms\win\filechooser.py", line 154, in _file_selection_dialog
     return Win32FileChooser(**kwargs).run()
   File "C:\Users\user\AppData\Local\Programs\Python\Python39\lib\site-packages\plyer\platforms\win\filechooser.py", line 145, in run
     self._handle_selection(self.selection)
   File "C:\Users\user\Desktop\Projects\KetoApp\main.py", line 302, in selected1
     self.root.ids.img1.source = selection1[0]
   File "kivy\properties.pyx", line 864, in kivy.properties.ObservableDict.__getattr__
 AttributeError: 'super' object has no attribute '__getattr__'
[Finished in 70.7s]

标签: pythonkivykivy-languagekivymd

解决方案


推荐阅读