Python透明KivyMD导航抽屉

Posted

技术标签:

【中文标题】Python透明KivyMD导航抽屉【英文标题】:Python Transparent KivyMD Navigation Drawer 【发布时间】:2020-11-21 15:09:12 【问题描述】:

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

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

MDNavigationDrawer 的外观如下

这是我的一些 Kivy 代码:

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 代码:

# 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

提前致谢!

【问题讨论】:

【参考方案1】:

问题

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

解决方案

MDNavigationDrawer: 放在 ScreenManager:

之后

片段

NavigationLayout:
    x: tb.height

    ScreenManager:
        id: manager

        ...
        HistoryWindow:
            id: history_window

    MDNavigationDrawer:
        id: nav_drawer

        ContentNavigationDrawer:

输出

【讨论】:

以上是关于Python透明KivyMD导航抽屉的主要内容,如果未能解决你的问题,请参考以下文章

kivymd 中的 AssertionError

KivyMD NavigationDrawer 在多个屏幕上滑动

无法在 kivy 中获取导航抽屉

导航抽屉在状态栏上半透明不起作用

Android Kitkat 4.4版本状态栏下使用导航抽屉时状态栏颜色显示为白色不透明

Kivymd MDNavigation 抽屉禁用滑动