KivyMD-如何使用屏幕本身内的KivyMD BottomNavigationItems和按钮在屏幕之间导航?

时间:2020-08-18 11:36:30

标签: python user-interface kivy kivy-language kivymd

我对Kivy ScreenManager感到茫然(免责声明-我对此很陌生)。

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

带有right_action_item的MDToolbar可以加载一个SettingsScreen,可以从应用程序内的任何位置调用它。

KivyMD BottomNavigationToolbar定义4个主屏幕(主屏幕,PlantsScreen,Tasks屏幕,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

我假设需要查看作为ScreensScreen的子级的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:当前,按钮 on_press:sm2.current(Screen2_1)返回** NameError:名称'sm2'未定义。**我不确定如何要解决此问题,以便屏幕切换?

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

1 个答案:

答案 0 :(得分:0)

Q1:
on_press:root.manager.current ='屏幕名称'