跳转到主要内容

类似Android侧边栏的控件。

项目描述

NavigationDrawer

NavigationDrawer控件提供了一个隐藏的面板视图,旨在复制流行的Android布局。用户查看一个主控件,但可以从屏幕左侧滑动以查看一个之前隐藏的控件。打开/关闭之间的转换平滑动画,参数(动画时间、面板宽度、触摸检测)均由用户配置。如果面板未完全打开或关闭时释放,则将其动画到适当的配置。

NavigationDrawer支持许多不同的动画属性,包括移动一个或两个侧边/主面板,变暗任一/两个控件,更改侧边面板不透明度,以及更改哪个控件位于顶部。用户可以单独编辑这些属性以符合个人口味(这绳子足够长,可以把自己吊死,很容易做出无用的或愚蠢的配置!),或者使用预设动画之一。

隐藏的面板通常是一组导航按钮(例如,在GridLayout中),但实现允许用户使用任何控件。

添加到NavigationDrawer的第一个控件将自动用作侧边面板,第二个控件用作主面板。无法添加更多控件,进一步的更改留给用户通过编辑面板控件来实现。

使用总结

  • 添加到导航抽屉的第一个小部件用作隐藏的侧面板。
  • 添加的第二个小部件用作主面板。
  • 可以使用remove_widget移除这两个小部件,或者通过set_main_panel和set_side_panel设置/移除。
  • 可以通过从导航抽屉的左侧拖动来显示隐藏的侧面板。触摸检测宽度是touch_accept_width属性。
  • 每个动画属性都可以由用户编辑,或者可以通过设置anim_type选择默认动画。

有关各个属性的详细信息,请参阅示例和docstrings。

安装

pip install kivy-garden.navigationdrawer

示例

from kivy.app import App
from kivy.base import runTouchApp
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.label import Label
from kivy.uix.button import Button
from kivy.uix.image import Image
from kivy.uix.widget import Widget
from kivy.core.window import Window
from kivy.metrics import dp

from kivy.garden.navigationdrawer import NavigationDrawer

class ExampleApp(App):

    def build(self):
        navigationdrawer = NavigationDrawer()

        side_panel = BoxLayout(orientation='vertical')
        side_panel.add_widget(Label(text='Panel label'))
        side_panel.add_widget(Button(text='A button'))
        side_panel.add_widget(Button(text='Another button'))
        navigationdrawer.add_widget(side_panel)

        label_head = (
            '[b]Example label filling main panel[/b]\n\n[color=ff0000](p'
            'ull from left to right!)[/color]\n\nIn this example, the le'
            'ft panel is a simple boxlayout menu, and this main panel is'
            ' a BoxLayout with a label and example image.\n\nSeveral pre'
            'set layouts are available (see buttons below), but users ma'
            'y edit every parameter for much more customisation.')
        main_panel = BoxLayout(orientation='vertical')
        label_bl = BoxLayout(orientation='horizontal')
        label = Label(text=label_head, font_size='15sp',
                      markup=True, valign='top')
        label_bl.add_widget(Widget(size_hint_x=None, width=dp(10)))
        label_bl.add_widget(label)
        label_bl.add_widget(Widget(size_hint_x=None, width=dp(10)))
        main_panel.add_widget(Widget(size_hint_y=None, height=dp(10)))
        main_panel.add_widget(label_bl)
        main_panel.add_widget(Widget(size_hint_y=None, height=dp(10)))
        main_panel.add_widget(Image(source='red_pixel.png', allow_stretch=True,
                                    keep_ratio=False, size_hint_y=0.2))
        navigationdrawer.add_widget(main_panel)
        label.bind(size=label.setter('text_size'))

        def set_anim_type(name):
            navigationdrawer.anim_type = name
        modes_layout = BoxLayout(orientation='horizontal')
        modes_layout.add_widget(Label(text='preset\nanims:'))
        slide_an = Button(text='slide_\nabove_\nanim')
        slide_an.bind(on_press=lambda j: set_anim_type('slide_above_anim'))
        slide_sim = Button(text='slide_\nabove_\nsimple')
        slide_sim.bind(on_press=lambda j: set_anim_type('slide_above_simple'))
        fade_in_button = Button(text='fade_in')
        fade_in_button.bind(on_press=lambda j: set_anim_type('fade_in'))
        reveal_button = Button(text='reveal_\nbelow_\nanim')
        reveal_button.bind(on_press=
                           lambda j: set_anim_type('reveal_below_anim'))
        slide_button = Button(text='reveal_\nbelow_\nsimple')
        slide_button.bind(on_press=
                          lambda j: set_anim_type('reveal_below_simple'))
        modes_layout.add_widget(slide_an)
        modes_layout.add_widget(slide_sim)
        modes_layout.add_widget(fade_in_button)
        modes_layout.add_widget(reveal_button)
        modes_layout.add_widget(slide_button)
        main_panel.add_widget(modes_layout)

        button = Button(text='toggle NavigationDrawer state (animate)',
                        size_hint_y=0.2)
        button.bind(on_press=lambda j: navigationdrawer.toggle_state())
        button2 = Button(text='toggle NavigationDrawer state (jump)',
                         size_hint_y=0.2)
        button2.bind(on_press=lambda j: navigationdrawer.toggle_state(False))
        button3 = Button(text='toggle _main_above', size_hint_y=0.2)
        button3.bind(on_press=navigationdrawer.toggle_main_above)
        main_panel.add_widget(button)
        main_panel.add_widget(button2)
        main_panel.add_widget(button3)

        return navigationdrawer

    ExampleApp().run()

项目详情


下载文件

下载适合您平台的应用程序。如果您不确定该选择哪个,请了解更多关于安装包的信息。

源代码分发

kivy_garden.navigationdrawer-1.0.2.tar.gz (13.5 kB 查看散列值)

上传时间: 源代码

构建分发

kivy_garden.navigationdrawer-1.0.2-py3-none-any.whl (13.8 kB 查看散列值)

上传时间: Python 3

由以下机构支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面