首页 > 解决方案 > Kivy:AttributeError:'super'对象在尝试在kivy中加载数据表时没有属性'__getattr__'

问题描述

我正在尝试将数据表加载到具有 3 个屏幕的 kivy 应用程序中。第一个屏幕是登录屏幕,第二个屏幕是“开始”按钮,用户单击“开始”按钮后,用户将被引导到可以看到数据表的第三个屏幕。为了加载信息,我为它创建了 1 个单独的 kivy 文件。现在在第三个屏幕中,我想添加一个数据表,它将显示数据以显示给用户。

根据 kivy 文档,我们只能在主程序中添加数据表,而不是在 .kv 文件中,但在我的情况下,我已经有一个 .kv 文件。我在将数据表加载到我的第三个屏幕时遇到了一些麻烦。任何帮助,将不胜感激。

class Screen1(Screen):
    pass

class Screen2(Screen):
    pass

class Screen3(Screen):
    pass    

class MyMainApp(MDApp):
    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        self.data_tables = None

    def build(self):
        self.kv = Builder.load_file("main1.kv")
        return self.kv

    def add_datatable(self):
        count = 1
        self.data_tables = MDDataTable(pos_hint={"center_x": 0.5, "center_y": 0.65}, 
                        size_hint=(0.85, 0.6), 
                        check = True, 
                        rows_num = 5, 
                        use_pagination = True,
                        pagination_menu_height = "240dp",
                        column_data=[
                            ("No.", dp(18)),
                            ("Tools",dp(20)),
                            ("Slot Number", dp(20)),
                            ("Condition", dp(20)),
                            ("Date Processed", dp(20)),
                            ("Time Processed", dp(20))
                        ],
                        row_data=[
                            (count, "Kuglen", "1", "Good", "1-Aug", "4pm"),
                            (count+1, "Mushroom", "2", "Bad", "5-Aug", "2pm"),
                        ]
                        )
    
    self.root.ids.data_scr.ids.data_layout.add_widget(self.data_tables)

    def change_screen(self, screen: str):
        self.root.current = screen

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

##基维。Screen1 的 Kivy 代码如下所示,因为它与焦点问题无关。

<Screen2>:
    name: "realtime_start"
    Button:
        text: "START PROCESSING"
        font_size: "25sp"
        size_hint: (0.3,0.3)
        pos_hint: {"center_x": 0.5, "center_y": 0.5}
        font_name: "BPoppins"
        color: rgba(255, 255, 255, 255)  #Text color
        background_color: 0.5, 0.5, 0.2, 0.2   #Box's color
        canvas.before:
            Color:
                rgb: rgba(57, 104, 128, 255)
            RoundedRectangle:
                size: self.size
                pos: self.pos
                radius: [15]
        on_release:
            app.change_screen("realtime_tools")
            app.add_datatable()
            root.start_button() 

<Screen3>: 
    name: "realtime_tools"
    MDFloatLayout:
        md_bg_color: 1,1,1,1
        AnchorLayout:
            id: data_layout

标签: pythonkivy

解决方案


请重点...

1 - 如果我复制/粘贴您的代码,它不起作用/我没有同样的问题(我应该停在那里)。

2 -self.root.ids.data_scr.ids.data_layout.add_widget(self.data_tables)在一个糟糕的地方使应用程序崩溃。

3 - 您加载了“main1.py”,但没有代表主应用程序的代码,只有小部件类............

4 - “开始处理”按钮让我崩溃,我删除了所有无用的东西,它工作。

5 - 我从未遇到过您收到的错误消息。

6 - 我可以让你的代码工作,但该死,你错过了很多东西......

这个问题是胡说八道,专注于你想要的。当我看到您遇到的错误时,您应该回到 kivy 教程,学习如何提出问题并制作一个最小的工作应用程序来代表您的问题。

祝你好运。:)


推荐阅读