Python透明KivyMD导航抽屉

2022-01-15 00:00:00 python python-3.x kivy kivymd

问题描述

我正在尝试对我的应用(数字规划器)应用一些更改,其中之一是能够在 MDNavigationDrawer 中切换屏幕,但我有两个问题:

I'm trying to apply some changes to my app (digital planner), one of which is being able to switch screens within MDNavigationDrawer, but I have two problems:

  1. 导航.抽屉是透明的.我尝试将其不透明度设置为 1 - 无效.
  2. 导航.抽屉似乎在下方";屏幕.如果导航上按钮的位置.抽屉和屏幕上的按钮匹配,按下的按钮是屏幕上的那个,而不是导航上的那个.抽屉.

MDNavigationDrawer 的外观如下

这是我的一些 Kivy 代码:

Here's a bit of my Kivy code:

BoxLayout:
    orientation: "vertical"

    manager: manager
    nav_drawer: nav_drawer

    MDToolbar:
        id: tb
        type: "top"
        title: "VPlanner"
        left_action_items: [["menu", lambda x: nav_drawer.set_state()]]
        right_action_items: [["settings", lambda x: app.open_settings()]]

    NavigationLayout:
        x: tb.height
    
        MDNavigationDrawer:
            id: nav_drawer

            ContentNavigationDrawer:    

        ScreenManager:
            id: manager

            menu_window: menu_window
            stats_window: stats_window
            history_window: history_window

            MenuWindow:
                id: menu_window

            StatsWindow:
                id: stats_window

            HistoryWindow:
                id: history_window


<ContentNavigationDrawer>:
    cols: 1
    orientation: "vertical"

    OneLineListItem:
        text: "Menu"

        size_hint: 1, None
        on_release: 
            app.root.nav_drawer.set_state("close")
            app.root.manager.current = "menu"

    OneLineListItem:
        text: "Statistics"

        size_hint: 1, None
        on_release: 
            app.root.nav_drawer.set_state("close")
            app.root.manager.current = "stats"

    OneLineListItem:
        text: "History"

        size_hint: 1, None
        on_release: 
            app.root.nav_drawer.set_state("close")
            app.root.manager.current = "history"

这是我的一小段 Python 代码:

And here's a tiny bit of my Python code:

# there were lots of lines in each class representing screens,
# so I only left the ContentNavigationDrawer class, which is,
# as you already figured it out, supposed to represent content
# displayed in the MDNavigationDrawer.


class ContentNavigationDrawer(GridLayout):
    pass

提前致谢!


解决方案

问题

Navigation Drawer 看起来是透明的,因为它被放置在 ScreenManager 之前.

将 MDNavigationDrawer: 放在 ScreenManager:

NavigationLayout:
    x: tb.height

    ScreenManager:
        id: manager

        ...
        HistoryWindow:
            id: history_window

    MDNavigationDrawer:
        id: nav_drawer

        ContentNavigationDrawer:

输出

相关文章