【问题标题】:AttributeError: 'Homepage' object has no attribute 'screen_manager'. Did you mean: 'ScreenManager'?AttributeError:“主页”对象没有属性“screen_manager”。你的意思是:'ScreenManager'?
【发布时间】:2022-07-18 03:17:46
【问题描述】:

此按钮有问题。我一直在更改对屏幕管理器的引用,因为我有两个,但我一直收到类似的错误。任何帮助将不胜感激,因为我意识到这可能是一个愚蠢或明显的错误。

我已经删除了其中一个屏幕,因为代码对于 stackoverflow 来说太多了 - 显然这不是问题,因为它与问题无关。

from kivy import Config
from kivy.lang import Builder
from kivy.metrics import dp
from kivy.properties import ObjectProperty
from kivy.properties import StringProperty
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.label import Label
from kivy.uix.popup import Popup
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.uix.textinput import TextInput
from kivymd.app import MDApp
from kivymd.theming import ThemableBehavior
from kivymd.uix.list import MDList, OneLineIconListItem
from kivymd.uix.menu import MDDropdownMenu
from kivymd.uix.navigationdrawer import MDNavigationLayout

Config.set('input', 'mouse', 'mouse,disable_multitouch')
class DrawerList(ThemableBehavior, MDList, Screen):
    pass
class NavLayout(MDNavigationLayout):
    pass
class Login(Screen):
    nav_drawer = ObjectProperty()
class Nav(Screen):
    Login = ObjectProperty()
    ScreenManager = ObjectProperty
    homepage = ObjectProperty()
class IconListItem(OneLineIconListItem):
    icon = StringProperty()
class Homepage(Screen):
    Login = ObjectProperty()
    nav_drawer = ObjectProperty()
    ScreenManager = ObjectProperty

    def __init__(self, **kw):
        super().__init__(**kw)
        self.menu = None
        self.menu_items = None

    def submit(self):
        Popup(title='Submitted', content=Label(text='Case has been submitted and will be reviewed'),
              size_hint=(0.5, 0.5)).open()
        sm = self.ids.screen_manager
        scr = sm.get_screen('Create Case')
        for child in scr.children:
            if isinstance(child, TextInput):
                child.text = ''

    def dropdown(self):
        self.menu_items = [
            {
                "viewclass": "IconListItem",
                "icon": "git",
                "font_size": 25,
                "text": f"Nice {i}",
                "height": dp(56),
                "on_release": lambda x=f"Item {i}": self.set_item(x),
            } for i in range(5)
        ]

        self.menu = MDDropdownMenu(
            caller=self.ids.drop_item,
            items=self.menu_items,
            position="center",
            width_mult=4,
        )
        self.menu.open()

    def set_item(self, text_item):
        self.ids.drop_item.set_item(text_item)
        self.menu.dismiss()


class AddNewCustomer(Screen):
    nav_drawer = ObjectProperty()


class AddNewStaff(Screen):
    pass
class ScreenManager(ScreenManager):
    Login = ObjectProperty()
    homepage = ObjectProperty()
class ContentNavigationDrawer(BoxLayout):
    pass
class MainApp(MDApp):
    def build(self):
        # Window.maximize()
        # self.theme_cls.theme_style = "Light"
        # self.theme_cls.primary_hue = "900"
        login = Builder.load_file("login.kv")
        return login


if __name__ == "__main__":
    MainApp().run()
ScreenManager:
    Login:
    Homepage:
    AddNewCustomer:
    Nav:
    DrawerList:
<Login>:
    name: "login"
    font_name: "Century"
    MDCard:
        size_hint: None, None
        size: 700, 800
        pos_hint: {"center_x": 0.5, "center_y": 0.5}
        elevation: 10
        padding: 25
        spacing: 25
        orientation: 'vertical'

        Image:
            source: 'images/asteria.png'
            size: 100, 200

        MDLabel:
            id: login
            font_size: 40
            font_name: "Century"
            halign: 'center'
            size_hint_y: None
            height: self.texture_size[1]
            padding_y: 15

        MDTextFieldRound:
            id: user
            hint_text: "username"
            font_name: "Century"
            icon_right: "account"
            size_hint_x: None
            width: 200
            font_size: 18
            pos_hint: {"center_x": 0.5}

        MDTextFieldRound:
            id: password
            hint_text: "password"
            font_name: "Century"
            icon_right: "eye-off"
            size_hint_x: None
            width: 200
            font_size: 18
            pos_hint: {"center_x": 0.5}
            password: True

        MDRoundFlatButton:
            text: "LOGIN"
            font_size: 12
            font_name: "Century"
            pos_hint: {"center_x": 0.5}

            on_release:
                root.manager.current = "homepage"
                root.manager.transition.direction = "left"

        MDRoundFlatButton:
            text: "CLEAR"
            font_size: 12
            font_name: "Century"
            pos_hint: {"center_x": 0.5}
            on_press: app.clear()


        Widget:
            size_hint_y: None
            height: 50


<Nav>:
    ScrollView:
        MDList:
            OneLineListItem:
                text: "[font=Century]Add New Customer[/font]"

                on_release:
                    root.nav_drawer.set_state("close")
                    root.screen_manager.current = "addNewCustomer"
                    root.screen_manager.transition.direction = "right"


            OneLineListItem:
                text: "[font=Century]Add New Staff[/font]"
                font_size: 15
                halign: "center"
                on_release:
                    root.nav_drawer.set_state("close")
                    root.screen_manager.current = "addNewStaff"

            OneLineListItem:
                text: "[font=Century]Case List[/font]"
                font_size: 15
                halign: "center"
                on_release:
                    root.nav_drawer.set_state("close")
                    root.screen_manager.current = "caseList"


            OneLineListItem:
                text: "[font=Century]Create Case[/font]"
                font_size: 15
                halign: "center"
                on_release:
                    root.nav_drawer.set_state("close")
                    root.screen_manager.transition.direction = "left"
                    root.screen_manager.current = "Create Case"


            OneLineListItem:
                text: "[font=Century]Create Case Version 2.0[/font]"
                font_size: 15
                halign: "center"
                on_release:
                    root.nav_drawer.set_state("close")
                    root.screen_manager.transition.direction = "left"
                    root.screen_manager.current = "Create Case Version 2.0"


            OneLineListItem:
                text: "[font=Century]Create Case Version 3.0[/font]"
                font_size: 15
                halign: "center"
                on_release:
                    root.nav_drawer.set_state("close")
                    root.screen_manager.transition.direction = "left"
                    root.screen_manager.current = "Create Case Version 3.0"



            OneLineListItem:
                text: "[font=Century]Log Out[/font]"
                font_size: 15
                halign: "center"
                on_release:
                    root.nav_drawer.set_state("close")

                    root.manager.current = "login"
                    root.manager.transition.direction = "right"



<Homepage>:
    name: "homepage"
    Screen:

        MDNavigationLayout:
            ScreenManager:
                id: screen_manager
                Screen:
                    name: "Homepage"
                    MDLabel:
                        text: "Welcome Home"
                        font_name: "Century"
                        halign: "center"


                Screen:
                    name: "addNewCustomer"
                    MDLabel:
                        text: "Add New customer"
                        font_name: "Century"
                        halign: "center"

                Screen:
                    name: "addNewStaff"
                    MDLabel:
                        text: "Add New Staff"
                        font_name: "Century"
                        halign: "center"

                Screen:
                    name: "caseList"
                    MDLabel:
                        text: "Case List"
                        font_name: "Century"
                        halign: "center"

                Screen:
                    name: "casePool"
                    MDLabel:
                        text: "Case Pool"
                        font_name: "Century"
                        halign: "center"

            
                Screen:
                    name: "Create Case Version 2.0"


                    MDLabel:
                        text: "Case Title"
                        font_size: 15
                        size_hint_x: None
                        bold: True
                        color: 0.204, 0.204, 0.204, 1
                        pos_hint: {"center_y": 0.875, "center_x": 0.180}



                    MDTextFieldRound:
                        id: CaseTitle
                        hint_text: "Info Here"
                        icon_right: "Case Title"
                        size_hint_x: None
                        multiline: True
                        height: 4000
                        width: 275
                        font_size: 15
                        pos_hint: {"top": 0.863, "center_x": 0.220}



                    MDLabel:
                        text: "Customer"
                        font_size: 15
                        size_hint_x: None
                        bold: True
                        color: 0.204, 0.204, 0.204, 1
                        pos_hint: {"center_y": 0.791, "center_x": 0.180}




                    MDTextFieldRound:
                        id: Customer
                        hint_text: "Info Here"
                        mode:"rectangle"
                        icon_right: "Customer"
                        size_hint_x: None
                        width: 275
                        font_size: 15
                        pos_hint: {"top": 0.779, "center_x": 0.220}


                    MDLabel:
                        text: "Customer Forename"
                        font_size: 15
                        size_hint_x: None
                        multiline: False
                        bold: True
                        color: 0.204, 0.204, 0.204, 1
                        pos_hint: {"center_y": 0.707, "center_x": 0.180}


                    MDTextFieldRound:
                        id: Customer Forename
                        hint_text: "Info here"
                        mode:"rectangle"
                        icon_right: "Customer"
                        size_hint_x: None
                        width: 275
                        font_size: 14
                        pos_hint: {"top": 0.687, "center_x": 0.220}

                    MDLabel:
                        text: "Customer Surname"
                        font_size: 15
                        size_hint_x: None
                        multiline: False
                        bold: True
                        color: 0.204, 0.204, 0.204, 1
                        pos_hint: {"center_y": 0.623, "center_x": 0.180}


                    MDTextFieldRound:
                        id: Customer Surname
                        hint_text: "Info Here"
                        mode:"rectangle"
                        icon_right: "Customer"
                        size_hint_x: None
                        width: 275
                        font_size: 14
                        pos_hint: {"top": 0.603, "center_x": 0.220}

                    MDLabel:
                        text: "Alternative email"
                        font_size: 15
                        size_hint_x: None
                        multiline: False
                        bold: True
                        color: 0.204, 0.204, 0.204, 1
                        pos_hint: {"center_y": 0.803, "center_x": 0.360}


                    MDTextFieldRound:
                        id: Alternative Email
                        hint_text: "Info Here"
                        mode:"rectangle"
                        size_hint_x: None
                        width: 275
                        font_size: 15
                        pos_hint: {"top": 0.779, "center_x": 0.400}

                    MDLabel:
                        text: "Alternative Phone"
                        font_size: 15
                        size_hint_x: None
                        multiline: False
                        bold: True
                        color: 0.204, 0.204, 0.204, 1
                        pos_hint: {"center_y": 0.707, "center_x": 0.360}


                    MDTextFieldRound:
                        id: Alternative phone
                        hint_text: "Info Here"
                        mode:"rectangle"
                        size_hint_x: None
                        width: 275
                        font_size: 15
                        pos_hint: {"top": 0.687, "center_x": 0.400}



                    MDLabel:
                        text: "Case Source"
                        font_size: 15
                        size_hint_x: None
                        multiline: False
                        bold: True
                        color: 0.204, 0.204, 0.204, 1
                        pos_hint: {"center_y": 0.623, "center_x": 0.360}

                    MDTextFieldRound:
                        id: Case Source
                        hint_text: "Info Here"
                        mode:"rectangle"
                        size_hint_x: None
                        width: 275
                        font_size: 15
                        pos_hint: {"top": 0.603, "center_x": 0.400}




                    MDLabel:
                        text: "Case Priority"
                        font_size: 15
                        size_hint_x: None
                        multiline: False
                        bold: True
                        color: 0.204, 0.204, 0.204, 1
                        pos_hint: {"center_y": 0.523, "center_x": 0.360}

                    MDTextFieldRound:
                        id: Case Priority
                        hint_text: "Info Here"
                        mode:"rectangle"
                        size_hint_x: None
                        width: 275
                        font_size: 15
                        pos_hint: {"top": 0.503, "center_x": 0.400}




                    MDLabel:
                        text: "Case Category"
                        font_size: 15
                        size_hint_x: None
                        multiline: False
                        bold: True
                        color: 0.204, 0.204, 0.204, 1
                        pos_hint: {"center_y": 0.423, "center_x": 0.360}

                    MDDropDownItem:
                        id: drop_item
                        pos_hint: {"center_y": .403, "center_x":  0.400}
                        text: 'filler text in here'
                        width: 275
                        on_release: root.dropdown()



                    MDLabel:
                        text: "Possible Cases"
                        font_size: 15
                        size_hint_x: None
                        bold: True
                        color: 0.204, 0.204, 0.204, 1
                        pos_hint: {"center_y": 0.887 , "center_x": 0.360}



                    MDTextFieldRound:
                        id: PossibleCases
                        hint_text: "Info Here"
                        icon_right: "Case Title"
                        size_hint_x: None
                        width: 275
                        font_size: 15
                        pos_hint: {"top": 0.863, "center_x": 0.400}



                    ThreeLineListItem:
                        text: "Knowledge Helper"
                        font_size: 15
                        secondary_text: "This is a multi-line label where you can"
                        tertiary_text: "fit more text than usual"
                        width: 275
                        size_hint_x: None
                        pos_hint: {"top": 0.915, "center_x": 0.645}



                    MDLabel:
                        text: "Case Description"
                        font_size: 15
                        size_hint_x: None
                        bold: True
                        color: 0.204, 0.204, 0.204, 1
                        pos_hint: {"center_y": 0.883, "center_x": 0.745}



                    MDTextField:
                        id: Case Description
                        hint_text: "Info Here"
                        icon_right: "Case Title"
                        size_hint_x: None
                        width: 275
                        multiline: True
                        font_size: 15
                        pos_hint: {"top": 0.863, "center_x": 0.790}

                    MDRoundFlatButton:
                        text: "Submit"
                        font_size: 60

                        pos_hint: {"center_y": 0.400,"center_x": 0.700}
                        on_release: root.submit()







                Screen:
                    name: "Create Case Version 3.0"


                    MDLabel:
                        text: "Case Title"
                        font_name: "Century"
                        font_size: 30
                        size_hint_x: None
                        width: 275
                        bold: True
                        color: 0.204, 0.204, 0.204, 1
                        pos_hint: {"center_y": 0.875, "center_x": 0.180}



                    MDTextFieldRound:
                        id: CaseTitle
                        hint_text: "Info Here"
                        font_name: "Century"
                        icon_right: "Case Title"
                        size_hint_x: None
                        multiline: True
                        height: 4000
                        width: 275
                        font_size: 30
                        pos_hint: {"top": 0.860, "center_x": 0.180}



                    MDLabel:
                        text: "Customer"
                        font_name: "Century"
                        font_size: 30
                        size_hint_x: None
                        width: 275
                        bold: True
                        color: 0.204, 0.204, 0.204, 1
                        pos_hint: {"center_y": 0.788, "center_x": 0.180}




                    MDTextFieldRound:
                        id: Customer
                        hint_text: "Info Here"
                        font_name: "Century"
                        mode:"rectangle"
                        icon_right: "Customer"
                        size_hint_x: None
                        width: 275
                        font_size: 30
                        pos_hint: {"top": 0.773, "center_x": 0.180}


                    MDLabel:
                        text: "Customer Forename"
                        font_size: 30
                        font_name: "Century"
                        size_hint_x: None
                        width: 300
                        multiline: False
                        bold: True
                        color: 0.204, 0.204, 0.204, 1
                        pos_hint: {"center_y": 0.701, "center_x": 0.180}


                    MDTextFieldRound:
                        id: Customer Forename
                        hint_text: "Info here"
                        font_name: "Century"
                        mode:"rectangle"
                        icon_right: "Customer"
                        size_hint_x: None
                        width: 275
                        font_size: 30
                        pos_hint: {"top": 0.687, "center_x": 0.180}

                    MDLabel:
                        text: "Customer Surname"
                        font_size: 30
                        font_name: "Century"
                        size_hint_x: None
                        width: 300
                        multiline: False
                        bold: True
                        color: 0.204, 0.204, 0.204, 1
                        pos_hint: {"center_y": 0.615, "center_x": 0.180}


                    MDTextFieldRound:
                        id: Customer Surname
                        hint_text: "Info Here"
                        font_name: "Century"
                        mode:"rectangle"
                        icon_right: "Customer"
                        size_hint_x: None
                        width: 275
                        font_size: 30
                        pos_hint: {"top": 0.601, "center_x": 0.180}

                    MDLabel:
                        text: "Alternative Email"
                        font_size: 30
                        font_name: "Century"
                        size_hint_x: None
                        multiline: False
                        width: 275
                        bold: True
                        color: 0.204, 0.204, 0.204, 1
                        pos_hint: {"center_y": 0.875, "center_x": 0.380}


                    MDTextFieldRound:
                        id: Alternative Email
                        hint_text: "ewan@jccomtech.com"
                        font_name: "Century"
                        mode:"rectangle"
                        size_hint_x: None
                        width: 275
                        font_size: 25
                        pos_hint: {"top": 0.860, "center_x": 0.380}

                    MDLabel:
                        text: "Alternative Phone"
                        font_size: 30
                        font_name: "Century"
                        size_hint_x: None
                        width: 275

                        multiline: False
                        bold: True
                        color: 0.204, 0.204, 0.204, 1
                        pos_hint: {"center_y": 0.788, "center_x": 0.380}


                    MDTextFieldRound:
                        id: Alternative phone
                        hint_text: "Info Here"
                        font_name: "Century"
                        mode:"rectangle"
                        size_hint_x: None
                        width: 275
                        font_size: 25
                        pos_hint: {"top": 0.773, "center_x": 0.380}



                    MDLabel:
                        text: "Case Source"
                        font_size: 30
                        font_name: "Century"
                        size_hint_x: None
                        multiline: False
                        width: 275
                        bold: True
                        color: 0.204, 0.204, 0.204, 1
                        pos_hint: {"center_y": 0.701, "center_x": 0.380}

                    MDTextFieldRound:
                        id: Case Source
                        hint_text: "Info Here"
                        font_name: "Century"
                        mode:"rectangle"
                        size_hint_x: None
                        width: 275
                        font_size: 25
                        pos_hint: {"top": 0.687, "center_x": 0.380}




                    MDLabel:
                        text: "Case Priority"
                        font_size: 30
                        font_name: "Century"
                        size_hint_x: None
                        multiline: False
                        width: 275
                        bold: True
                        color: 0.204, 0.204, 0.204, 1
                        pos_hint: {"center_y": 0.615, "center_x": 0.380}

                    MDTextFieldRound:
                        id: Case Priority
                        hint_text: "Info Here"
                        font_name: "Century"
                        mode:"rectangle"
                        size_hint_x: None
                        width: 275
                        font_size: 25
                        pos_hint: {"top": 0.595, "center_x": 0.380}




                    MDLabel:
                        text: "Case Category"
                        font_size: 30
                        size_hint_x: None
                        font_name: "Century"
                        multiline: False
                        width: 275
                        bold: True
                        color: 0.204, 0.204, 0.204, 1
                        pos_hint: {"center_y": 0.423, "center_x": 0.380}

                    MDDropDownItem:
                        id: drop_item
                        font_size: 25
                        pos_hint: {"center_y": .423, "center_x":  0.450}



                        font_name: "Century"

                        width: 275
                        on_release: root.dropdown()







                    MDLabel:
                        text: "Knowledge Helper"
                        font_size: 30
                        font_name: "Century"
                        width: 275
                        multiline: False
                        size_hint_x: None
                        pos_hint: {"center_y": 0.875, "center_x": 0.580}

                    MDTextField:
                        id: Knowledge Helper
                        hint_text: "Info Here"
                        font_name: "Century"
                        icon_right: "Case Title"
                        size_hint_x: None
                        width: 275
                        multiline: True
                        font_size: 15
                        pos_hint: {"top": 0.863, "center_x": 0.580}






                    MDLabel:
                        text: "Case Description"
                        font_size: 30
                        font_name: "Century"
                        size_hint_x: None
                        width: 275
                        bold: True
                        color: 0.204, 0.204, 0.204, 1
                        pos_hint: {"center_y": 0.883, "center_x": 0.780}



                    MDTextField:
                        id: Case Description
                        hint_text: "Info Here"
                        font_name: "Century"
                        icon_right: "Case Title"
                        size_hint_x: None
                        width: 275
                        multiline: True
                        font_size: 15
                        pos_hint: {"top": 0.863, "center_x": 0.780}


                    MDLabel:
                        text: "Possible Cases"
                        font_size: 30
                        font_name: "Century"
                        size_hint_x: None
                        width: 275
                        bold: True
                        color: 0.204, 0.204, 0.204, 1
                        pos_hint: {"center_y": 0.351 , "center_x": 0.380}



                    MDTextFieldRound:
                        id: PossibleCases
                        hint_text: "Info Here"
                        font_name: "Century"
                        icon_right: "Case Title"
                        size_hint_x: None
                        width: 275
                        font_size: 25
                        pos_hint: {"top": 0.337, "center_x": 0.380}

                    MDRoundFlatButton:
                        text: "Submit"
                        font_size: 60
                        font_name: "Century"

                        pos_hint: {"center_y": 0.400,"center_x": 0.700}
                        on_release: root.submit()




        BoxLayout:
            orientation: 'vertical'
            MDToolbar:
                title: '[font=Century]Navigation[/font]'
                height:'100dp'

                font_name: "Century"

                left_action_items: [['menu', lambda x: nav_drawer.set_state('open')]]

                canvas:
                    Rectangle:
                        pos: (((self.parent.size[0])/2)+760,self.pos[1])
                        size: (200, 100)


                        source: 'images/asteria3.png'

                Button:
                    screen_manager: screen_manager
                    manager: root.manager
                    text:'Homepage'
                    font_name: 'Century'
                    pos: (((self.parent.size[0])/2)+500,self.pos[1])
                    size_hint: None, None
                    size: (100, 100)
                    on_release: root.ScreenManager.current = "homepage"

            Widget:


        MDNavigationDrawer:
            id: nav_drawer
            Nav:
                screen_manager: screen_manager
                nav_drawer: nav_drawer
                manager: root.manager

【问题讨论】:

  • 如何重现该错误?我可以运行您的代码,但不会出现该错误。
  • 您好,顶栏上有一个主页按钮。在任何页面上单击它时都会引发该错误。
  • HomePage 按钮不在屏幕上。现在看看。

标签: python kivy kivymd


【解决方案1】:

几个问题:

  • 名为ScreenManager 的东西太多。有一个名为ScreenManager 的类,无论何时你做ScreenManager = ...,你都会遇到麻烦。将ScreenManager 更改为其他内容。还将您定义的类从 class ScreenManager(ScreenManager) 更改为其他名称,例如 class MyScreenManager(ScreenManager)
  • 在您的python 代码中,您至少在两个地方有ScreenManager = ObjectProperty。一个问题是您必须使用someName = ObjectProperty()(注意())才能创建ObjectProperty。并查看之前的问题。
  • 在您的kv 代码中,您的Homepage 按钮尝试将current 屏幕设置为homepage。它应该是Homepage 以匹配kv 中设置的name。假设您正试图访问带有 Welcome Home 标签的屏幕。
  • 在您的kv 代码中,您需要添加一行来设置ObjectProperty 的值,该值包含对ScreenManager 的引用。由于与名为 ScreenManager 的类冲突,Kivy 不允许您定义名为 ScreenManager 的属性。

尝试改变:

<Homepage>:
    name: "homepage"
    Screen:

        MDNavigationLayout:
            ScreenManager:
                id: screen_manager
                Screen:
                    name: "Homepage"

到:

<Homepage>:
    name: "homepage"
    scrmgr: screen_manager  # added reference to ScreenManager
    Screen:

        MDNavigationLayout:
            ScreenManager:
                id: screen_manager
                Screen:
                    name: "Homepage"

在你的python代码中:

class Homepage(Screen):
    Login = ObjectProperty()
    nav_drawer = ObjectProperty()
    scrmgr = ObjectProperty()  # changed from ScreenManager

然后HomePage 按钮可以是:

                on_release:
                    root.scrmgr.current = "Homepage"

【讨论】:

    猜你喜欢
    • 2022-06-14
    • 2020-11-24
    • 2019-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多