屏幕管理器(AttributeError:'super'对象没有属性''

2024-10-01 22:41:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我是相当新的Kivy编程和需要使用它的项目。我遇到的问题是,每当我试图使用屏幕管理器更改屏幕时,总是会出现以下错误。在

AttributeError:“super”对象没有属性“getattr

如果有人能解释如何修正错误,也能解释造成错误的原因吗? 任何帮助都会得到极大的赞赏

主代码:`

  import kivy
import webbrowser
import MSQLHandler
kivy.require('1.10.0')


from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.button import Label
from kivy.uix.widget import Widget
from kivy.uix.listview import ListItemButton
from kivy.properties import ObjectProperty
from kivy.lang import Builder
from kivy.uix.screenmanager import ScreenManager, Screen, CardTransition

class Login(Screen):

    class kivy_screen_manager(ScreenManager):
        pass

    teacher_connect_image = ObjectProperty()

    username_text_input = ObjectProperty()
    password_text_input = ObjectProperty()

    def LoginButton(self):
        MSQLHandler.LoginSystem(self.username_text_input.text, self.password_text_input.text, 0)

    def changeScreen(self,  next_screen):
        self.manager.current = next_screen


class MainKivyFrameApp(App):

    def build(self):
        return Login()

mainFrame = MainKivyFrameApp()
mainFrame.run()

`

.Kv文件

^{pr2}$

`

完整错误消息:

    Traceback (most recent call last):
   File "C:/Users/XOmar/Desktop/MMSA - Multi Media School Access/NewProject.py", line 39, in <module>
     mainFrame.run()
   File "C:\Users\XOmar\Desktop\MMSA - Multi Media School Access\venv\lib\site-packages\kivy\app.py", line 801, in run
     self.load_kv(filename=self.kv_file)
   File "C:\Users\XOmar\Desktop\MMSA - Multi Media School Access\venv\lib\site-packages\kivy\app.py", line 598, in load_kv
     root = Builder.load_file(rfilename)
   File "C:\Users\XOmar\Desktop\MMSA - Multi Media School Access\venv\lib\site-packages\kivy\lang\builder.py", line 301, in load_file
     return self.load_string(data, **kwargs)
   File "C:\Users\XOmar\Desktop\MMSA - Multi Media School Access\venv\lib\site-packages\kivy\lang\builder.py", line 350, in load_string
     parser = Parser(content=string, filename=fn)
   File "C:\Users\XOmar\Desktop\MMSA - Multi Media School Access\venv\lib\site-packages\kivy\lang\parser.py", line 392, in __init__
     self.parse(content)
   File "C:\Users\XOmar\Desktop\MMSA - Multi Media School Access\venv\lib\site-packages\kivy\lang\parser.py", line 498, in parse
     self.execute_directives()
   File "C:\Users\XOmar\Desktop\MMSA - Multi Media School Access\venv\lib\site-packages\kivy\lang\parser.py", line 462, in execute_directives
     mod = __import__(package)
   File "C:\Users\XOmar\Desktop\MMSA - Multi Media School Access\NewProject.py", line 39, in <module>
     mainFrame.run()
   File "C:\Users\XOmar\Desktop\MMSA - Multi Media School Access\venv\lib\site-packages\kivy\app.py", line 828, in run
     runTouchApp()
   File "C:\Users\XOmar\Desktop\MMSA - Multi Media School Access\venv\lib\site-packages\kivy\base.py", line 504, in runTouchApp
     EventLoop.window.mainloop()
   File "C:\Users\XOmar\Desktop\MMSA - Multi Media School Access\venv\lib\site-packages\kivy\core\window\window_sdl2.py", line 663, in mainloop
     self._mainloop()
   File "C:\Users\XOmar\Desktop\MMSA - Multi Media School Access\venv\lib\site-packages\kivy\core\window\window_sdl2.py", line 405, in _mainloop
     EventLoop.idle()
   File "C:\Users\XOmar\Desktop\MMSA - Multi Media School Access\venv\lib\site-packages\kivy\base.py", line 342, in idle
     self.dispatch_input()
   File "C:\Users\XOmar\Desktop\MMSA - Multi Media School Access\venv\lib\site-packages\kivy\base.py", line 327, in dispatch_input
     post_dispatch_input(*pop(0))
   File "C:\Users\XOmar\Desktop\MMSA - Multi Media School Access\venv\lib\site-packages\kivy\base.py", line 293, in post_dispatch_input
     wid.dispatch('on_touch_up', me)
   File "kivy\_event.pyx", line 718, in kivy._event.EventDispatcher.dispatch (kivy\_event.c:8191)
   File "C:\Users\XOmar\Desktop\MMSA - Multi Media School Access\venv\lib\site-packages\kivy\uix\behaviors\button.py", line 179, in on_touch_up
     self.dispatch('on_release')
   File "kivy\_event.pyx", line 714, in kivy._event.EventDispatcher.dispatch (kivy\_event.c:8146)
   File "kivy\_event.pyx", line 1225, in kivy._event.EventObservers.dispatch (kivy\_event.c:14035)
   File "kivy\_event.pyx", line 1109, in kivy._event.EventObservers._dispatch (kivy\_event.c:12816)
   File "C:\Users\XOmar\Desktop\MMSA - Multi Media School Access\venv\lib\site-packages\kivy\lang\builder.py", line 64, in custom_callback
     exec(__kvlang__.co_value, idmap)
   File "C:\Users\XOmar\Desktop\MMSA - Multi Media School Access\mainkivyframe.kv", line 51, in <module>
     on_release: app.root.changeScreen("LogedInScreen")
   File "C:\Users\XOmar\Desktop\MMSA - Multi Media School Access\NewProject.py", line 30, in changeScreen
     self.manager.current = next_screen
 AttributeError: 'NoneType' object has no attribute 'current'

'


Tags: inpyaccessvenvliblinemediamulti
1条回答
网友
1楼 · 发布于 2024-10-01 22:41:44

错误消息是准确的:

Traceback (most recent call last):
   File "kivy\properties.pyx", line 836, in kivy.properties.ObservableDict.__getattr__ (kivy\properties.c:12509)
 KeyError: 'kivy_screen_manager'

指示kivy_screen_manager不是{}的一部分, ID存储在字典中。在

只有Login的子级可以通过id进行访问,如果我们看到.kv的摘要,我们会看到以下内容,并且很明显{}没有在登录下。在

^{pr2}$

如果要从屏幕访问^{},则必须使用^{}属性,在您的情况下,它会更改:

self.ids.kivy_screen_manager.current = "LogedInScreen" 

self.manager.current = "LogedInScreen"

更新:

问题是,to root是登录,而不是ScreenManager,而且根之上没有任何内容,因此即使您声明了{},它也不存在。在

假设.kv文件名为design.kv,则必须修改以下部分:

设计千伏

....
<Login@Screen>:
    ...
        Button:
            text: "Login"
            on_release: root.changeScreen("LogedInScreen")

...

并用Builder加载.kv:

from kivy.lang import Builder

....

class MainKivyFrameApp(App):
    def build(self):
        root = Builder.load_file("design.kv")
        return root

...

相关问题 更多 >

    热门问题