python - AttributeError:“超级”对象没有属性“__getattr__”
问题描述
我一直在整个互联网上寻找这个问题的解决方案,但我仍然找不到正确的解决方案。有很多通用答案,但没有一个能解决我的问题..
我正在尝试使用 kivy 和 python 3.6.4 构建一个简单的 CLOCK 应用程序,但每次运行时main.py
都会出现此错误:
AttributeError:“超级”对象没有属性“ getattr ”
我的主要“main.py”文件是这样的:
from kivy.app import App
from kivy.clock import Clock
from kivy.core.text import LabelBase
from kivy.core.window import Window
from kivy.utils import get_color_from_hex
from time import strftime
class ClockApp(App):
def on_start(self):
Clock.schedule_interval(self.update, 0)
def update(self, nap):
self.root.ids.time.text = strftime('[b]%H[/b]:%M:%S')
if __name__ == '__main__':
Window.clearcolor = get_color_from_hex('#101216')
LabelBase.register(name='Roboto',
fn_regular='Roboto-Thin.ttf',
fn_bold='Roboto-Medium.ttf')
ClockApp().run()
我的“clock.kv”文件是这样的:
<Label>:
font_name: 'Roboto'
font_size: 60
markup: True
BoxLayout:
orientation: 'vertical'
Label:
id: time
text: '[b]00[/b]:00:00'
这是我运行“main.py”时出现的错误
[INFO ] [Logger ] Record log in C:\Users\Alessandro\.kivy \logs\kivy_18-05-19_4.txt
[INFO ] [Kivy ] v1.10.0
[INFO ] [Python ] v3.6.4 (v3.6.4:d48eceb, Dec 19 2017, 06:04:45) [MSC v.1900 32 bit (Intel)]
[INFO ] [Factory ] 194 symbols loaded
[INFO ] [Image ] Providers: img_tex, img_dds, img_sdl2, img_pil, img_gif (img_ffpyplayer ignored)
[INFO ] [Text ] Provider: sdl2
[INFO ] [OSC ] using <thread> for socket
[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.4.0 - Build 20.19.15.4549'>
[INFO ] [GL ] OpenGL vendor <b'Intel'>
[INFO ] [GL ] OpenGL renderer <b'Intel(R) HD Graphics 5500'>
[INFO ] [GL ] OpenGL parsed version: 4, 4
[INFO ] [GL ] Shading version <b'4.40 - Build 20.19.15.4549'>
[INFO ] [GL ] Texture max size <16384>
[INFO ] [GL ] Texture max units <32>
[INFO ] [Shader ] fragment shader: <b"WARNING: 0:7: '' : #version directive missing">
[INFO ] [Shader ] vertex shader: <b"WARNING: 0:7: '' : #version directive missing">
[INFO ] [Window ] auto add sdl2 input provider
[INFO ] [Window ] virtual keyboard not allowed, single mode, not docked
[INFO ] [Base ] Start application main loop
[INFO ] [Base ] Leaving application in progress...
Traceback (most recent call last):
File "kivy\properties.pyx", line 836, in kivy.properties.ObservableDict.__getattr__ (kivy\properties.c:12509)
KeyError: 'time'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "C:\Users\Alessandro\Desktop\Clock\main.py", line 24, in <module>
ClockApp().run()
File "C:\Users\Alessandro\AppData\Local\Programs\Python\Python36-32\lib\site-packages\kivy\app.py", line 828, in run
runTouchApp()
File "C:\Users\Alessandro\AppData\Local\Programs\Python\Python36-32\lib\site-packages\kivy\base.py", line 504, in runTouchApp
EventLoop.window.mainloop()
File "C:\Users\Alessandro\AppData\Local\Programs\Python\Python36-32\lib\site-packages\kivy\core\window\window_sdl2.py", line 663, in mainloop
self._mainloop()
File "C:\Users\Alessandro\AppData\Local\Programs\Python\Python36-32\lib\site-packages\kivy\core\window\window_sdl2.py", line 405, in _mainloop
EventLoop.idle()
File "C:\Users\Alessandro\AppData\Local\Programs\Python\Python36-32\lib\site-packages\kivy\base.py", line 339, in idle
Clock.tick()
File "C:\Users\Alessandro\AppData\Local\Programs\Python\Python36-32\lib\site-packages\kivy\clock.py", line 581, in tick
self._process_events()
File "kivy\_clock.pyx", line 367, in kivy._clock.CyClockBase._process_events (kivy\_clock.c:7700)
File "kivy\_clock.pyx", line 397, in kivy._clock.CyClockBase._process_events (kivy\_clock.c:7577)
File "kivy\_clock.pyx", line 395, in kivy._clock.CyClockBase._process_events (kivy\_clock.c:7498)
File "kivy\_clock.pyx", line 167, in kivy._clock.ClockEvent.tick (kivy\_clock.c:3490)
File "C:\Users\Alessandro\Desktop\Clock\main.py", line 16, in update
self.root.ids.time.text = strftime('[b]%H[/b]:%M:%S')
File "kivy\properties.pyx", line 839, in kivy.properties.ObservableDict.__getattr__ (kivy\properties.c:12654)
AttributeError: 'super' object has no attribute '__getattr__'
解决方案
.kv 的结构看起来不正确,例如,观察到有许多根会导致另一个问题,所以如果你想要一个告诉你问题原因的响应,你应该改进你的缩进。
相反,我将向您展示一个正确的 .kv,其中根是 BoxLayout,您的孩子是带有 id 时间的标签:
时钟.kv
<Label>:
font_name: 'Roboto'
font_size: 60
markup: True
BoxLayout:
orientation: 'vertical'
Label:
id: time
text: '[b]00[/b]:00:00'
主文件
from kivy.app import App
from kivy.clock import Clock
from kivy.core.text import LabelBase
from kivy.core.window import Window
from kivy.utils import get_color_from_hex
from time import strftime
class ClockApp(App):
def on_start(self):
Clock.schedule_interval(self.update, 0)
def update(self, *args):
self.root.ids.time.text = strftime('[b]%H[/b]:%M:%S')
if __name__ == '__main__':
Window.clearcolor = get_color_from_hex('#101216')
LabelBase.register(name='Roboto', fn_regular='Roboto-Thin.ttf', fn_bold='Roboto-Medium.ttf')
ClockApp().run()
推荐阅读
- php - SQL插入不要让我插入超过20列
- visual-studio - 如何在 Visual Studio 2015 中调试 VB 6 二进制文件
- facebook - 在我的网站上显示我自己的 Facebook 帖子
- npm - 如何通过npm全局安装exp
- outlook - 使用 Outlook 加载项 API,我们是否可以强制下载图像而不管电子邮件客户端配置如何?
- spring - Spring 和 Hibernate 集成
- python - 什么时候将 StopIteration 转换为 RuntimeError?
- javascript - ag-grid:使用“serverSide”rowModel 刷新当前视图
- mongodb - 如果我们将 _id 字段设为字符串,性能将如何影响 mongodb
- selenium-webdriver - HTML UnitDriver 的 Xpath