KIVY项目导入navigationdrawer报KeyError,如何实现侧边导航抽屉
报错原因
- 触发
KeyError: 'kivy.garden.navigationdrawer'的核心原因是你尚未安装对应garden扩展,且该扩展属于已停止维护的旧版Kivy Garden生态,无法适配Kivy 2.0及以上版本。 - 旧版garden扩展的安装逻辑是先安装garden工具
pip install kivy-garden,再执行garden install navigationdrawer才能正常导入,即便完成安装,该废弃组件也大概率会在新版本Kivy中出现运行错误。
原生Kivy实现侧边导航抽屉方案
不需要依赖任何第三方扩展,仅用Kivy自带组件即可实现符合需求的侧边抽屉,核心逻辑是通过位移动画控制侧边菜单的显示/隐藏:
from kivy.app import App from kivy.uix.floatlayout import FloatLayout from kivy.uix.boxlayout import BoxLayout from kivy.uix.button import Button from kivy.animation import Animation class NavDrawer(BoxLayout): def __init__(self, **kwargs): super().__init__(**kwargs) # 侧边菜单占屏幕30%宽度,默认隐藏在屏幕左侧外 self.size_hint = (0.3, 1) self.pos_hint = {'x': -0.3, 'top': 1} self.orientation = 'vertical' # 自定义菜单项 menu_items = ['首页', '内容管理', '设置', '关于', '退出'] for item in menu_items: btn = Button(text=item, size_hint_y=0.1) # 可绑定菜单项点击事件 btn.bind(on_press=lambda x, item=item: self.on_menu_click(item)) self.add_widget(btn) def on_menu_click(self, item): # 自定义菜单项点击逻辑 print(f"点击了菜单项:{item}") class MainContainer(FloatLayout): def __init__(self, **kwargs): super().__init__(**kwargs) self.drawer_open = False # 加入侧边抽屉 self.nav_drawer = NavDrawer() self.add_widget(self.nav_drawer) # 菜单触发按钮 self.menu_toggle = Button(text='☰', size_hint=(0.1, 0.05), pos_hint={'x': 0.02, 'top': 0.98}) self.menu_toggle.bind(on_press=self.toggle_drawer) self.add_widget(self.menu_toggle) # 主内容区可在此处添加你已开发完成的应用主体代码 def toggle_drawer(self, instance): if not self.drawer_open: # 滑出抽屉 Animation(x=0, duration=0.3, t='out_cubic').start(self.nav_drawer) self.drawer_open = True else: # 收回抽屉 Animation(x=-0.3, duration=0.3, t='in_cubic').start(self.nav_drawer) self.drawer_open = False class MyApp(App): def build(self): return MainContainer() if __name__ == '__main__': MyApp().run()
你可以根据自己的项目需求调整菜单宽度、动画效果、菜单项样式,也可以额外添加点击主内容区收回抽屉的交互逻辑。
内容的提问来源于stack exchange,提问作者Ayushman Rajora
相关产品推荐
相关产品推荐

