KivyMD-如何使用KivyMD BottomNavigationItems和屏幕内的按钮在屏幕中导航



我对Kivy ScreenManager感到不知所措(免责声明-我对此相当陌生(。

我的愿望是利用以下功能构建一个基本的应用程序:

带有right_action_item的MDToolbar可加载设置屏幕,该屏幕可从应用程序中的任何位置调用。

KivyMD BottomNavigationToolbar定义4个主屏幕(HomeScreen、PlantsScreen、TasksScreen、WikiScreen(。

PlantsScreen中会有一个ScrollView,其中包含许多MDCard/Button的MDList。每个按钮的功能是调用PlantsScreen中的另一个屏幕,即:

PlantsScreen:
ScrollView:
MDList:
MDTextButton:
on_press: # display Screen2_1
MDTextButton:
on_press: # display Screen2_2
MDTextButton:
on_press: # display Screen2_3
MDTextButton:
on_press: # display Screen2_4

我假设这将需要完成查看作为PlantsScreen的子项的ScreenManager的新实例。然而,我在访问屏幕时遇到了问题。

目前我的代码片段如下(不包括导入等(:

.py

Builder.load_file('.kv files/Plants_Screen.kv')
class HomeScreen(MDScreen):
pass
class PlantsScreen(MDBoxLayout):
class Screen2_1(MDScreen):
pass
class Screen2_2(MDScreen):
pass
class Screen2_3(MDScreen):
pass
class Screen2_4(MDScreen):
pass
class GardenTools(MDApp):
def build(self):
return Builder.load_file('.kv files/main.kv')

GardenTools().run()

.kv

BoxLayout:
orientation: 'vertical'
MDToolbar:
title: 'Bottom navigation'
md_bg_color: .2, .2, .2, 1
specific_text_color: 1, 1, 1, 1
MDBottomNavigation:
panel_color: .2, .2, .2, 1
MDBottomNavigationItem:
name: 'HomeScreen'
text: 'Home'
icon: 'home'
MDLabel:
text: 'Home'
halign: 'center'
MDBottomNavigationItem:
name: 'PlantsScreen'
text: 'Plants'
icon: 'carrot'
PlantsScreen
MDBottomNavigationItem:
name: 'TasksScreen'
text: 'Tasks'
icon: 'note-multiple'
MDLabel:
text: 'Tasks'
halign: 'center'
MDBottomNavigationItem:
name: 'WikiScreen'
text: 'Wiki'
icon: 'web'
MDLabel:
text: 'Wiki'
halign: 'center'
<PlantsScreen>:
ScreenManager:
id: sm2
Plants_Home:
Screen2_1:
Screen2_2:
name: 'Screen2_2'
MDLabel:
text: 'Screen2_2'
Screen2_3:
Screen2_4:
<Plants_Home>:
name: 'Plants_Home'
MDLabel:
text: 'Plants_Home'
MDTextButton:
text: 'Screen2_1'
on_press: root.sm2.current(Screen2_1)
<Screen2_1>:
name: 'Screen2_1'
MDLabel:
text: 'Screen2_1'
<Screen2_2>:
<Screen2_3>:
<Screen2_4>:

问题1:当前按下按钮时:sm2.current(Screen2_1(返回**名称错误:名称"sm2"未定义。**我不确定如何解决此问题,因此切换屏幕?

问题2:使用可以随时调用的MDToolbar的right_action_item创建和打开设置屏幕的最佳方法是什么?

Q1:
on_press:root.manager.current='screen-name'

最新更新