屏幕管理器AttributeError:“超级”对象没有属性“ __getattr__”

时间:2019-07-28 13:04:10

标签: python kivy

我在项目中使用ScreenManager。当我在Main.py中返回“ Home”类时,它可以正常工作,但如果返回“ ScreenManager”,它将得到AttributeError。该如何修复。

Main.py

- hosts: all
  become: root
  tasks:

  -name: add user Natasha

    user:
    - name: natasha
    - comment:"Natasha Ping"
    - uid: 1027
    - group: ping

  -name: add user John

    user:
    - name: john
    - comment:"John Pong"
    - uid: 1028
    - group: ping

当我返回Home()时有效,但我返回SM则不可行

HomeScreen.py

from kivy.app import App
from kivy.lang.builder import Builder
from Components.Home.HomeScreen import Home,EachTask
from Components.SM.SM import SM
Builder.load_file("Components/SM/SM.kv")
Builder.load_file("Components/Home/HomeScreen.kv")
class Main(App):
    def build(self):
        return SM()

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

错误

class Home(Screen):


def __init__(self,**kwargs):
    super(Home,self).__init__(**kwargs)
    EachTask.Remove_widget = self.remove_widget
    MyPopup.Remove_widget = self.remove_widget_pop
    EachTask.Do_Popup_Task = self.do_popup_task




    for row in database:


        if (row[3]) == True:
            newListItem = EachTask(rgba=[0, .7, .3, 1],
                                   text= row[0] + "    time:    " + row[1],
                                   id=row[2])
            self.ids.add_field.add_widget(newListItem)

        else:

                newListItem = EachTask(text=row[0] + "    time:    " + row[1],
                                       id=row[2])

                self.ids.add_field.add_widget(newListItem)

1 个答案:

答案 0 :(得分:0)

如果不查看kv文件和py文件,则无话可说。 但是,只是检查

self.ids.add_field.add_widget(newListItem)

此行会将newListItem添加到.kv file中定义的布局中。 此布局的id:也必须为add_field

例如(kv文件):

<Home>:
  GridLayout:
     id:add_field
     cols:2