python kivy AttributeError: 'super' object has no attribute ' 您所在的位置:网站首页 attribute文件 python kivy AttributeError: 'super' object has no attribute '

python kivy AttributeError: 'super' object has no attribute '

2023-03-15 23:03| 来源: 网络整理| 查看: 265

在一个项目中,我想做一个简单的GUI,显示一些基本信息(如时间、日期、公共交通信息、一些新闻等),为了做到这一点,我想要一个主页,显示所有这些东西的概况,并为每个主题提供一个详细的页面。Python与Kivy的结合似乎是最好/最简单的解决方案,看起来很好,工作起来也很容易。然而,我在显示时间方面遇到了一个问题。当我试图更新显示时间的标签上的文字时,我得到的是AttributeError: 'super' object has no attribute '__getattr__',这并没有给我很多信息,让我去哪里寻找解决方案。谁能指出问题所在?

main.py。

import feedparser import time from kivy.app import App from kivy.lang import Builder from kivy.uix.screenmanager import ScreenManager, Screen from kivy.uix.anchorlayout import AnchorLayout from kivy.properties import NumericProperty, ReferenceListProperty, ObjectProperty, StringProperty from kivy.uix.label import Label from kivy.uix.widget import Widget from kivy.clock import Clock # Declare widgets class DateTime(Widget): curtime = StringProperty('') def update(self, dt): self.curtime = time.strftime("%H:%M:%S") print self.curtime self.ids["kv_timelabel"].text = str(self.curtime) # Declare all screens class HomeScreen(Screen): obj_datetime = DateTime() Clock.schedule_interval(obj_datetime.update, 1.0 / 10.0) class NewsScreen(Screen): pass class PublicTransportScreen(Screen): pass class TrafficScreen(Screen): pass class ScreenManagement(ScreenManager): pass class MirrorApp(App): def build(self): # Create the screen manager render = ScreenManagement() render.add_widget(HomeScreen(name='home')) render.add_widget(TrafficScreen(name='traffic')) render.add_widget(PublicTransportScreen(name='public_transport')) render.add_widget(NewsScreen(name='news')) return render if __name__ == '__main__': MirrorApp().run()

mirror.kv:

#:kivy 1.9.0 : name: 'home' obj_datetime: kv_datetime Button: on_release: app.root.current = 'news' text: 'News' size_hint: 0.5,0.15 font_size: 50 pos_hint: {"left":1, "top":0.15} Button: on_release: app.root.current = 'public_transport' text: 'Public Transport' size_hint: 0.5,0.15 font_size: 50 pos_hint: {"left":1, "top":0.3} Button: on_release: app.root.current = 'traffic' text: 'Traffic' size_hint: 0.5,0.15 font_size: 50 pos_hint: {"left":1, "top":0.45} DateTime: id: kv_datetime center: self.parent.center : name: 'news' Button: on_release: app.root.current = 'home' text: 'back to the home screen' font_size: 50 : name: 'public_transport' Button: on_release: app.root.current = 'home' text: 'back to the home screen' font_size: 50 : name: 'traffic' Button: on_release: app.root.current = 'home' text: 'back to the home screen' font_size: 50 : Label: id: kv_timelabel text: font_size: 70 center_x: self.parent.center_x center_y: self.parent.center_y

我在运行main.py时得到的错误是(我想这个错误的最后两行左右已经足够了,但你永远无法做到足够彻底)。

[INFO ] [Logger ] Record log in /home/matthias/.kivy/logs/kivy_16-04-17_97.txt [INFO ] [Kivy ] v1.9.0 [INFO ] [Python ] v2.7.10 (default, Oct 14 2015, 16:09:02) [GCC 5.2.1 20151010] [INFO ] [Factory ] 173 symbols loaded [INFO ] [Image ] Providers: img_tex, img_dds, img_gif, img_sdl2, img_pil (img_ffpyplayer ignored) [INFO ] [Text ] Provider: sdl2 [INFO ] [OSC ] using for socket [INFO ] [Window ] Provider: sdl2(['window_egl_rpi'] ignored) [INFO ] [GL ] OpenGL version [INFO ] [GL ] OpenGL vendor [INFO ] [GL ] OpenGL renderer [INFO ] [GL ] OpenGL parsed version: 3, 0 [INFO ] [GL ] Shading version [INFO ] [GL ] Texture max size [INFO ] [GL ] Texture max units [INFO ] [Window ] auto add sdl2 input provider [INFO ] [Window ] virtual keyboard not allowed, single mode, not docked [INFO ] [ProbeSysfs ] device match: /dev/input/event5 [INFO ] [MTD ] Read event from [INFO ] [Base ] Start application main loop [INFO ] [GL ] NPOT texture support is available 19:39:33 [INFO ] [Base ] Leaving application in progress... Traceback (most recent call last): File "main.py", line 49, in MirrorApp().run() File "/usr/lib/python2.7/dist-packages/kivy/app.py", line 824, in run Exception in thread Thread-1: runTouchApp() Traceback (most recent call last): File "/usr/lib/python2.7/dist-packages/kivy/base.py", line 487, in runTouchApp EventLoop.window.mainloop() File "/usr/lib/python2.7/threading.py", line 810, in __bootstrap_inner File "/usr/lib/python2.7/dist-packages/kivy/core/window/window_sdl2.py", line 525, in mainloop self.run() self._mainloop() File "/usr/lib/python2.7/threading.py", line 763, in run File "/usr/lib/python2.7/dist-packages/kivy/core/window/window_sdl2.py", line 290, in _mainloop self.__target(*self.__args, **self.__kwargs) EventLoop.idle() File "/usr/lib/python2.7/dist-packages/kivy/base.py", line 327, in idle File "/usr/lib/python2.7/dist-packages/kivy/input/providers/mtdev.py", line 197, in _thread_run Clock.tick() File "/usr/lib/python2.7/dist-packages/kivy/clock.py", line 483, in tick self._process_events() _device = Device(_fn) File "/usr/lib/python2.7/dist-packages/kivy/clock.py", line 615, in _process_events File "/usr/lib/python2.7/dist-packages/kivy/lib/mtdev.py", line 131, in __init__ self._fd = os.open(filename, os.O_NONBLOCK | os.O_RDONLY) OSError: [Errno 13] Permission denied: '/dev/input/event5' event.tick(self._last_tick, remove) File "/usr/lib/python2.7/dist-packages/kivy/clock.py", line 374, in tick ret = callback(self._dt) File "main.py", line 19, in update self.ids["kv_timelabel"].text = str(self.curtime) KeyError: 'kv_timelabel'

When I replace self.ids["kv_timelabel"].text = str(self.curtime) with self.ids.kv_timelabel.text = str(self.curtime) I get:

[INFO ] [Logger ] Record log in /home/matthias/.kivy/logs/kivy_16-04-17_98.txt [INFO ] [Kivy ] v1.9.0 [INFO ] [Python ] v2.7.10 (default, Oct 14 2015, 16:09:02) [GCC 5.2.1 20151010] [INFO ] [Factory ] 173 symbols loaded [INFO ] [Image ] Providers: img_tex, img_dds, img_gif, img_sdl2, img_pil (img_ffpyplayer ignored) [INFO ] [Text ] Provider: sdl2 [INFO ] [OSC ] using for socket [INFO ] [Window ] Provider: sdl2(['window_egl_rpi'] ignored) [INFO ] [GL ] OpenGL version [INFO ] [GL ] OpenGL vendor [INFO ] [GL ] OpenGL renderer [INFO ] [GL ] OpenGL parsed version: 3, 0 [INFO ] [GL ] Shading version [INFO ] [GL ] Texture max size [INFO ] [GL ] Texture max units [INFO ] [Window ] auto add sdl2 input provider [INFO ] [Window ] virtual keyboard not allowed, single mode, not docked [INFO ] [ProbeSysfs ] device match: /dev/input/event5 [INFO ] [MTD ] Read event from [INFO ] [Base ] Start application main loop [INFO ] [GL ] NPOT texture support is available 19:42:01 [INFO ] [Base ] Leaving application in progress... Traceback (most recent call last): File "main.py", line 49, in Exception in thread Thread-1: Traceback (most recent call last): File "/usr/lib/python2.7/threading.py", line 810, in __bootstrap_inner self.run() File "/usr/lib/python2.7/threading.py", line 763, in run MirrorApp().run() self.__target(*self.__args, **self.__kwargs) File "/usr/lib/python2.7/dist-packages/kivy/app.py", line 824, in run File "/usr/lib/python2.7/dist-packages/kivy/input/providers/mtdev.py", line 197, in _thread_run runTouchApp() _device = Device(_fn) File "/usr/lib/python2.7/dist-packages/kivy/base.py", line 487, in runTouchApp File "/usr/lib/python2.7/dist-packages/kivy/lib/mtdev.py", line 131, in __init__ EventLoop.window.mainloop() self._fd = os.open(filename, os.O_NONBLOCK | os.O_RDONLY) File "/usr/lib/python2.7/dist-packages/kivy/core/window/window_sdl2.py", line 525, in mainloop OSError: [Errno 13] Permission denied: '/dev/input/event5' self._mainloop() File "/usr/lib/python2.7/dist-packages/kivy/core/window/window_sdl2.py", line 290, in _mainloop EventLoop.idle() File "/usr/lib/python2.7/dist-packages/kivy/base.py", line 327, in idle Clock.tick() File "/usr/lib/python2.7/dist-packages/kivy/clock.py", line 483, in tick self._process_events() File "/usr/lib/python2.7/dist-packages/kivy/clock.py", line 615, in _process_events event.tick(self._last_tick, remove) File "/usr/lib/python2.7/dist-packages/kivy/clock.py", line 374, in tick ret = callback(self._dt) File "main.py", line 19, in update self.ids.kv_timelabel.text = str(self.curtime) File "kivy/properties.pyx", line 720, in kivy.properties.ObservableDict.__getattr__ (kivy/properties.c:10938) AttributeError: 'super' object has no attribute '__getattr__'

请注意,当我删除它在错误中提到的那一行时,代码就能正常工作。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

      专题文章
        CopyRight 2018-2019 实验室设备网 版权所有