Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python KivyMD-如何使用KivyMD BottomNavigationItems和屏幕内的按钮在屏幕上导航?_Python_User Interface_Kivy_Kivy Language_Kivymd - Fatal编程技术网

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

Python KivyMD-如何使用KivyMD BottomNavigationItems和屏幕内的按钮在屏幕上导航?,python,user-interface,kivy,kivy-language,kivymd,Python,User Interface,Kivy,Kivy Language,Kivymd,我对Kivy ScreenManager感到不知所措(免责声明-我对这一点相当陌生) 我的愿望是利用以下内容构建一个基本应用程序: MDToolbar,带有右键\u action\u项,用于加载设置屏幕,可从应用程序内的任何位置调用设置屏幕 KivyMD BottomNavigationToolbar定义4个主屏幕(主屏幕、PlantsScreen、TasksScreen、WikiScreen) 在PlantsScreen中,将有一个滚动视图,其中包含多个MD卡/按钮的MDList。每个按钮的功

我对Kivy ScreenManager感到不知所措(免责声明-我对这一点相当陌生)

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

MDToolbar,带有右键\u action\u项,用于加载设置屏幕,可从应用程序内的任何位置调用设置屏幕

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

在PlantsScreen中,将有一个滚动视图,其中包含多个MD卡/按钮的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的子对象。但是,我在访问屏幕时遇到问题

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

白痴

.kv

BoxLayout:
方向:“垂直”
MDToolbar:
标题:“底部导航”
md_bg_颜色:.2、.2、1
特定文字颜色:1,1,1,1
MDB导航:
面板颜色:.2、.2、.2、1
MDBottomNavigationItem:
名称:“主屏幕”
文字:“家”
图标:“家”
MDLabel:
文字:“家”
哈利恩:“中心”
MDBottomNavigationItem:
名称:“PlantsScreen”
文字:“植物”
图标:“胡萝卜”
植物筛选
MDBottomNavigationItem:
名称:“TasksScreen”
文本:“任务”
图标:“注意多个”
MDLabel:
文本:“任务”
哈利恩:“中心”
MDBottomNavigationItem:
名称:“WikiScreen”
文本:“维基”
图标:“网络”
MDLabel:
文本:“维基”
哈利恩:“中心”
:
屏幕管理器:
编号:sm2
植物之家:
屏幕2\u 1:
屏幕2\u 2:
名称:“Screen2_2”
MDLabel:
文本:“屏幕2_2”
屏幕2\u 3:
屏幕2\u 4:
:
名称:“植物之家”
MDLabel:
文字:“植物之家”
MDTEXT按钮:
文本:“屏幕2\u 1”
按:root.sm2.current(屏幕2\u 1)
:
名称:“屏幕2\u 1”
MDLabel:
文本:“屏幕2\u 1”
:
:
:
问题1:当前按下屏幕上的按钮:sm2。当前(屏幕2\u 1)返回**名称错误:名称“sm2”未定义。**我不确定如何解决此问题,因此屏幕切换

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

Q1:
按:root.manager.current='screen name'

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()
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>: