【问题标题】:How to create a Navigation Bar using KivyMD without kv language? [closed]如何在没有 kv 语言的情况下使用 KivyMD 创建导航栏? [关闭]
【发布时间】:2019-11-27 12:48:30
【问题描述】:

我想在我的 android 应用程序中创建一个导航栏。我在 google 中搜索了很多。我得到了解决方案,但它基于 kv 语言。我需要不使用kv语言来创建。

我不喜欢 kivy 语言。我只喜欢python

欢迎大家提出意见

在此先感谢

【问题讨论】:

  • 那么你这样做有什么问题?如果您已经使用 kv 成功完成了它,那么一定有一些特定问题阻止您根据自己的喜好进行调整?
  • 您也可以使用 builderstring 在 py 文件中编写 kv 代码 - 如果这样可以让生活更轻松
  • 我无法强调 kv 语言有多棒,刚开始学习可能有点令人生畏,但你会很快掌握。它会让你的生活更轻松

标签: python kivy navigation-drawer


【解决方案1】:

带有KivyMD的导航抽屉的应用(带有kv代码):

from kivy.lang import Builder
from kivymd.app import MDApp
from kivymd.uix.navigationdrawer import NavigationLayout  # Do not remove

root_kv = """
<ContentNavigationDrawer@MDNavigationDrawer>:
    drawer_logo: "drawer_logo.png"

    NavigationDrawerSubheader:
        text: "Menu:"

    NavigationDrawerIconButton:
        icon: "access-point"
        text: "First"

    NavigationDrawerIconButton:
        icon: "account"
        text: "Second"


NavigationLayout:
    id: nav_layout

    ContentNavigationDrawer:
        id: nav_drawer

    BoxLayout:
        orientation: "vertical"

        MDToolbar:
            id: toolbar
            title: "Toolbar title"
            md_bg_color: app.theme_cls.primary_color
            background_palette: "Primary"
            background_hue: "500"
            elevation: 10
            left_action_items:
                [["menu", lambda x: app.root.toggle_nav_drawer()]]

        BoxLayout:
            orientation: "vertical"
            padding: dp(16)

            MDRaisedButton:
                text: "Click me!"

            Widget:
"""


class MainApp(MDApp):

    def build(self):
        self.root = Builder.load_string(root_kv)


if __name__ == "__main__":
    MainApp().run()

没有 kv 代码的同一个应用程序(也没有绑定到应用程序主题颜色,没有 id 并且没有其他有用的东西)。 (仅适用于 master 分支的 KivyMD,请参阅 how to install

from kivy.metrics import dp
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.widget import Widget
from kivymd.app import MDApp
from kivymd.uix.navigationdrawer import (
    NavigationLayout,
    MDNavigationDrawer,
    NavigationDrawerSubheader,
    NavigationDrawerIconButton,
)
from kivymd.uix.toolbar import MDToolbar
from kivymd.uix.button import MDRaisedButton


class MainApp(MDApp):
    def build(self):
        nav_layout = NavigationLayout()
        nav_drawer = MDNavigationDrawer(drawer_logo="drawer_logo.png")
        nav_drawer.add_widget(NavigationDrawerSubheader(text="Menu:"))
        nav_drawer.add_widget(
            NavigationDrawerIconButton(icon="access-point", text="First")
        )
        nav_drawer.add_widget(NavigationDrawerIconButton(icon="account", text="Second"))
        box_layout = BoxLayout(orientation="vertical")
        toolbar = MDToolbar(
            title="Toolbar title",
            md_bg_color=self.theme_cls.primary_color,
            background_palette="Primary",
            background_hue="500",
            elevation=10,
        )
        toolbar.left_action_items = [["menu", lambda x: self.root.toggle_nav_drawer()]]
        box_layout.add_widget(toolbar)
        box_layout_content = BoxLayout(orientation="vertical", padding=dp(16))
        box_layout_content.add_widget(MDRaisedButton(text="Click me!"))
        box_layout_content.add_widget(Widget())
        box_layout.add_widget(box_layout_content)
        nav_layout.add_widget(nav_drawer)
        nav_layout.add_widget(box_layout)
        self.root = nav_layout


if __name__ == "__main__":
    MainApp().run()

我觉得kv语言的app代码可读性更好,看起来也不错。如果您将编写所有应用程序代码而不使用 kv 语言,那么它看起来会很糟糕,难以编辑并且以后会有很多错误。出于这个原因,我建议你学习 kv 语言并用它编写程序。

【讨论】:

    猜你喜欢
    • 2021-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    • 2023-04-05
    • 1970-01-01
    相关资源
    最近更新 更多