KivyMD - 如何使用 KivyMD BottomNavigationItems 和屏幕本身内的按钮在屏幕上导航?
Posted
技术标签:
【中文标题】KivyMD - 如何使用 KivyMD BottomNavigationItems 和屏幕本身内的按钮在屏幕上导航?【英文标题】:KivyMD - How can I navigate around Screens using both KivyMD BottomNavigationItems and Buttons within the Screens themselves? 【发布时间】:2020-12-07 14:10:03 【问题描述】:我对 Kivy ScreenManager 不知所措(免责声明 - 我对此很陌生)。
我的愿望是利用以下内容构建一个基本应用程序:
带有 right_action_item 的 MDToolbar 用于加载可以从应用内的任何位置调用的 SettingsScreen。
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 的新实例。但是我在访问屏幕时遇到问题。
目前我的代码 sn-ps 如下(不包括导入等):
.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: 目前按钮 on_press: sm2.current(Screen2_1) 返回 **NameError: name 'sm2' is not defined.**我不确定如何解决这个问题以便屏幕切换?
问题 2:使用可随时调用的 MDToolbar 的 right_action_item 创建和打开 SettingsScreen 的最佳方法是什么?
【问题讨论】:
【参考方案1】:第一季度: on_press: root.manager.current= '网名'
【讨论】:
以上是关于KivyMD - 如何使用 KivyMD BottomNavigationItems 和屏幕本身内的按钮在屏幕上导航?的主要内容,如果未能解决你的问题,请参考以下文章
Kivymd:如何将“MDTextfield”更改为“int”