python - 如何修复“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]
解决方案
推荐阅读
- javascript - 使用 typescript jsx 进行配置
- python - 在 GCP 上打包培训应用程序 Tar 文件路径
- javascript - 如何获取 url 图像并将其转换为 blob 函数?
- javascript - 如何像在纯 js 中一样快地在 Node.js c++ 插件中生成 JsObject?
- kubernetes - 当响应为 401 时,如何为 Kubernetes Ingress Nginx auth-url 设置 CORS?
- rust - 如何使用 RUST 编写 https 服务器?
- r - 如何根据 R 中两列中不匹配的值对数据框进行子集化?
- julia - 如何在 Flux.jl 中使用 .pth 模型?
- r - 当一行的值大于下一行时如何合并两行
- primeng - 重大变化 Prime NG 11 迁移