【问题标题】:File "kivy\properties.pyx", line 864, in kivy.properties.ObservableDict.__getattr__ AttributeError: 'super' object has no attribute '__getattr__'文件“kivy\properties.pyx”,第 864 行,在 kivy.properties.ObservableDict.__getattr__ AttributeError: 'super' object has no attribute '__getattr__'
【发布时间】:2023-03-23 06:07:01
【问题描述】:

我只是在学习,我尝试运行这个简单的代码: 我有问题,我们能帮帮我吗: 这是我的应用程序代码:


from kivy.core.window import Window
from kivy.lang import Builder
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.image import Image
from kivymd.app import MDApp

KV = """
MDFloatLayout:

    Carousel:



        MDFloatLayout:
            id : slide     


            MDTextField:
                hint_text: "First Name"

                size_hint_x: 0.5
                icon_right: "account"
                pos_hint:{"center_x":0.5,"center_y":0.5}
                font_style: "H6"
                text_color: "Custom"
            MDTextField:
                hint_text: "Last Name"
                size_hint_x: 0.5
                icon_right: "account"
                pos_hint:{"center_x":0.5,"center_y":0.4}

            MDRaisedButton:
                text:"NEXT"
                size_hint_x:0.2
                pos_hint: {"center_x":0.5,"center_y":0.2}
                on_release: app.next()

"""


class Jeu(FloatLayout):
    def debut(self):
        self.size = Window.size
        self.add_widget(Image(source='w2.jpg', allow_stretch=True, keep_ratio=False))


class ViTVApp(MDApp):
    def build(self):
        kv1 = Builder.load_string(KV)
        kv = Jeu()
        img = Image(source="1611647504798.png",
                    size_hint_y=0.15, size_hint_x=0.15, pos_hint={'center_x': 0.5, 'center_y': 0.85}, opacity=0.8)

        kv.debut()
        kv.add_widget(img)
        kv.add_widget(kv1)
        return kv

    def next(self):
        self.root.ids.slide.ids.carousel.load_next(mode="next")



if __name__ == "__main__":
    ViTVApp().run()

控制台反复报此错误,但弹出窗口就好了:

文件“”,第 30 行,在 文件“E:\Developpement\ViTV\P1\P3.py”,第 64 行,在下一个 self.root.ids.slide.ids.carousel.load_next(mode="next") 文件“kivy\properties.pyx”,第 864 行,在 kivy.properties.ObservableDict.getattr AttributeError:“超级”对象没有属性“getattr

【问题讨论】:

    标签: python kivy kivymd


    【解决方案1】:

    问题是您试图在没有ids 的小部件中访问idApp 的根小部件是 Jeu 对象,但只有使用 kv 构建的小部件(如 kv1)才会有 ids,所以 self.root.ids 会失败。此外,您在kv 中定义的唯一idslide,因此任何访问carouselid 的尝试也将失败。

    解决此问题的一种方法是在您的 kv 中实际定义一个 carousel id,如下所示:

    KV = """
    MDFloatLayout:
    
        Carousel:
            id: carousel  # new id
    
            MDFloatLayout:
            ...
            ...
    

    然后,保存对使用该kv 构建的小部件的引用,并使用该引用访问Carousel 小部件:

    class ViTVApp(MDApp):
        def build(self):
            self.kv1 = Builder.load_string(KV)  #save reference
            kv = Jeu()
            img = Image(source="1611647504798.png",
                        size_hint_y=0.15, size_hint_x=0.15, pos_hint={'center_x': 0.5, 'center_y': 0.85}, opacity=0.8)
    
            kv.debut()
            kv.add_widget(img)
            kv.add_widget(self.kv1)
            return kv
    
        def next(self):
            self.kv1.ids.carousel.load_next(mode="next")  # use saved reference
    

    【讨论】:

      猜你喜欢
      • 2023-01-22
      • 2022-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-12
      相关资源
      最近更新 更多