kivymd 中的屏幕没有改变,显示“AttributeError:‘NoneType’对象没有属性‘transition’”

Posted

技术标签:

【中文标题】kivymd 中的屏幕没有改变,显示“AttributeError:‘NoneType’对象没有属性‘transition’”【英文标题】:Screen is not changing in kivymd showing "AttributeError: 'NoneType' object has no attribute 'transition' " 【发布时间】:2020-09-05 21:16:42 【问题描述】:

我有两个从屏幕继承的类。在主屏幕中,有一个导航抽屉,我想从中将我的屏幕更改为另一个屏幕,但是当我尝试这样做时,它会抛出一个属性错误,说 NoneType 对象没有属性“转换”我已经尝试了所有这里的代码我的 .kv 文件

#:import FadeTransition kivy.uix.screenmanager.FadeTransition

ScreenManager:
    id: screens

    FirstScreen:
        Share:

    AboutUs:
        MDIconButton:
            icon: 'close'
            theme_text_color: "Custom"
            text_color: app.theme_cls.primary_color
            pos_hint: "center_y": 0.97
            text_color: 1, 1, 1, 1
            on_release:
                screens.transition.direction = 'right'
                screens.current = "main"

<ContentNavigationDrawer>:
    background_color: 2, 3, 4, 5
    orientation: "vertical"
    padding: "8dp"
    spacing: "8dp"

    AnchorLayout:
        anchor_x: "right"
        size_hint_y: None
        height: avatar.height

        Image:
            id: avatar
            size_hint: None, None
            size: "56dp", "56dp"
            source: "data/logo/kivy-icon-256.png"

        MDLabel:
            anchor_y: 'left'
            text: "[b]Story A Day[/b]"
            theme_text_color: "Custom"
            text_color: 0, 0, 0, 1
            markup: True
            font_style: "H4"
            size_hint_y: None
            height: self.texture_size[1]

    MDLabel:
        text: 'Story A Day'
        font_style: "Button"
        size_hint_y: None
        height: self.texture_size[1]

    ScrollView:
        MDList:
            MDExpansionPanelTwoLine:
                text: 'send us your idea'
                secondary_text: 'email: xxxxx@gmail.com'

                IconLeftWidget:
                    icon: "email"

            TwoLineAvatarListItem:
                text: 'Send us'
                secondary_text: 'to: Story@gmail.com'

                IconLeftWidget:
                    icon: "email"

            OneLineAvatarListItem:
                text: "About Us"
                on_release:
                    root.nav_drawer.set_state("close")
                    root.screens.transition.direction = 'right'
                    root.screens.current = "screen1"

                IconLeftWidget:
                    icon: "information"
                    on_release:
                        root.nav_drawer.set_state("close")
                        app.root.manager.transition = FadeTransition(duration=0.5)
                        app.root.manager.current = "screen1"

<AboutUs>:
    name: 'screen1'
    canvas:
        Color:
            rgba: 0, 0, 0, 1
        Rectangle:
            pos: self.pos
            size: self.size
    Label:
        text_color: 255, 255, 255, 0
        text: """[b]About Us [/b]"""
        markup: True
        font_size: '40sp'
        text_size: None, None
        size_hint: 1, 1.9
        height: self.texture_size[1]

    Label:
        text_color: 255, 255, 255, 0
        font_size: '18sp'
        text_size: self.width, None
        size_hint: 1, 1.5
        height: self.texture_size[1]
        halign: "center"
        valign: "center"
        text:
            """ """

<Share>:
    MDFloatingActionButtonSpeedDial:
        data: root.data
        icon: 'share-variant'
        opening_time: 0.5
        callback: root.callback   # on pressing the call stack buttons
        color_icon_root_button: 0, 0, 0, 1  # color of icon of button
        color_icon_stack_button: 0, 0, 0, 1
        hint_animation: True
        rotation_root_button: False


<FirstScreen>:
    name: 'main'

    NavigationLayout:
        id: nav_layout

        ScreenManager:
            id: screens
            Screen:

                MDToolbar:
                    id: toolbar
                    title: "Story"
                    anchor_title: 'left'
                    pos_hint: "top": 1
                    elevation: 10
                    left_action_items: [['menu', lambda x: nav_drawer.set_state()]]


                BoxLayout:
                    size_hint: 1, None
                    height: root.height - toolbar.height
                    canvas:
                        Color:
                            rgba: 0, 0, 0, 1
                        Rectangle:
                            pos: self.pos
                            size: self.size
                    ScrollView:
                        Label:
                            text:
                                """
                                A boy and a girl were playing together. The boy
                                had a collection of marbles. The girl has some
                                sweets with her. The boy told the girl that he
                                would give her all his marbles in exchange for the
                                sweets with her. The girl agreed.

                                The boy kept the most beautiful and the biggest
                                marbles with him and gave her the remaining marbles.
                                The girl gave him all her sweets as she promised.
                                That night the girl slept peacefully. But the boy
                                could not sleep as he kept wondering if the girl
                                has hidden some sweets from him the way he had
                                hidden the best marbles from her.

                                Moral of the Story :

                                If you do not give 100 percent in a relationship,
                                you will always kept doubting if the other person
                                has given her / his hundred percent. This is applicable
                                for any relationship like love, employee –
                                employer, friendship, family, countries, etc
                                and the most of the feelings we get now
                                days are just merely just the impact of the
                                surrounding now days we dont have a good
                                feeling that last long
                                and now we have to just name it in that way
                                If you do not give 100 percent in a relationship,
                                you will always kept doubting if the other person
                                has given her / his hundred percent. This is applicable
                                for any relationship like love, employee –
                                employer, friendship, family, countries, etc
                                and the most of the feelings we get now
                                days are just merely just the impact of the
                                surrounding now days we dont have a good
                                feeling that last long
                                and now we have to just name it in that way
                                If you do not give 100 percent in a relationship,
                                you will always kept doubting if the other person
                                has given her / his hundred percent. This is applicable
                                for any relationship like love, employee –
                                employer, friendship, family, countries, etc
                                and the most of the feelings we get now
                                days are just merely just the impact of the
                                surrounding now days we dont have a good
                                feeling that last long
                                and now we have to just name it in that way
                                """
                            font_size: '20sp'
                            text_color: 255,255,255, 0
                            height: self.texture_size[1]
                            size: self.texture_size
                            text_size: root.width, None
                            size_hint_x: 1.0
                            size_hint_y: None
                            halign: "center"
                            valign: "middle"



        MDNavigationDrawer:
            title: 'Story A Day'
            id: nav_drawer
            swipe_distance: 10

            ContentNavigationDrawer:
                id: content_drawer
                screens: app.root
                nav_drawer: nav_drawer

【问题讨论】:

【参考方案1】:

只需在 on_release 中写入 app.root.screens.current 即可

【讨论】:

以上是关于kivymd 中的屏幕没有改变,显示“AttributeError:‘NoneType’对象没有属性‘transition’”的主要内容,如果未能解决你的问题,请参考以下文章

如何在 KivyMD 的 .kv 文件中使用 kivy 中的数据表?

在 kivymd 屏幕中显示 opencv

如何在 kivymd 中添加多个屏幕?

小吃店 KivyMd 中的文本颜色问题

我有 3 个屏幕,想显示用户在 3ed 屏幕 kivymd 上输入的名称

如何在 kivymd 功能开始时显示加载屏幕?