【问题标题】:KivyMD: Contents of Screen overlap with ToolbarKivyMD:屏幕内容与工具栏重叠
【发布时间】:2020-04-20 09:04:16
【问题描述】:

我正在 KivyMD 中编写一个简单的应用程序。根据 kivy 文档,我的 .kv 结构与 MDNavigationDrawer 和 MDToolbar 是正确的,只要屏幕为空,一切正常。当我向它们添加内容时,内容而不是位于工具栏下方的内容位于其上方。我该如何解决?

这是我的代码:

from kivy.lang import Builder
from kivy.uix.boxlayout import BoxLayout
from kivy.properties import ObjectProperty

from kivymd.app import MDApp

KV = '''
<ContentNavigationDrawer>:

    ScrollView:

        MDList:

            OneLineListItem:
                text: "Screen 1"
                on_press:
                    root.nav_drawer.set_state("close")
                    root.screen_manager.current = "scr 1"

            OneLineListItem:
                text: "Screen 2"
                on_press:
                    root.nav_drawer.set_state("close")
                    root.screen_manager.current = "scr 2"


Screen:

    MDToolbar:
        id: toolbar
        pos_hint: {"top": 1}
        elevation: 10
        title: "Test"
        left_action_items: [["menu", lambda x: nav_drawer.set_state("open")]]

    NavigationLayout:
        x: toolbar.height

        ScreenManager:
            Screen:
                name: "scr 1"
                ScrollView:
                    BoxLayout:
                        orientation: "vertical"
                        Button:
                            text: "Hello"
                        Button:
                            text: "I wish"
                        Button:
                            text: "I could"
                        Button:
                            text: "Finally get"
                        Button:
                            text: "This to work"


            Screen:
                name: "scr 2"

                MDLabel:
                    text: "Screen 2"
                    halign: "center"

        MDNavigationDrawer:
            id: nav_drawer

            ContentNavigationDrawer:
                screen_manager: screen_manager
                nav_drawer: nav_drawer
'''


class ContentNavigationDrawer(BoxLayout):
    screen_manager = ObjectProperty()
    nav_drawer = ObjectProperty()


class TestNavigationDrawer(MDApp):
    def build(self):
        return Builder.load_string(KV)


TestNavigationDrawer().run()

以下代码的输出:

【问题讨论】:

    标签: python user-interface kivy


    【解决方案1】:

    Screen 类是 RelativeLayout,因此您必须像放置任何 RelativeLayout 一样定位其子级。 Screen 的每个子级都获得默认的size_hint(1,1) 和默认的pos(0,0),所以如果这不是你想要的,你必须调整它。在您的情况下,NavigationLayout 将根据这些默认值完全覆盖Screen。您可以通过添加size_hint_y 来解决此问题,如下所示:

    NavigationLayout:
        x: toolbar.height
        size_hint_y: 1.0 - toolbar.height/root.height
    

    这会设置NavigationLayout 的大小,使其刚好与MDToolbar 的底部相接,而不是重叠。

    【讨论】:

      【解决方案2】:

      问题在于出现的顺序: 如果屏幕还有卡片和布局等其他小部件,则所有这些都必须首先出现。

      即将导航布局和相应的屏幕管理器放在底部。

      最后的出现在其他一切之上。

      这对我有用。

      【讨论】:

        猜你喜欢
        • 2021-05-21
        • 2017-02-21
        • 1970-01-01
        • 2021-10-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-06-08
        • 1970-01-01
        相关资源
        最近更新 更多