如何简单地绑定导航抽屉按钮和屏幕?

时间:2020-09-06 12:00:53

标签: python button navigation kivy

我有问题。我想创建一个应用程序,并使用带有屏幕管理器的导航抽屉。但是,我无法执行屏幕切换。我可以在单击时更改按钮的颜色,但不能更改屏幕。您有想法,魔术公式甚至是舞蹈表演吗? 这是有问题的代码。我对Kivy还是比较菜鸟,请放纵自己。

鸟类危害Tracking_Main.py

from kivy.uix.boxlayout import BoxLayout
from kivy.properties import StringProperty, ListProperty
from kivy.uix.screenmanager import ScreenManager, Screen

from kivymd.app import MDApp
from kivymd.theming import ThemableBehavior
from kivymd.uix.list import OneLineIconListItem, MDList

from Stylesheet import *

class ContentNavigationDrawer(BoxLayout):
    pass


class ItemDrawer(OneLineIconListItem):
    icon = StringProperty()
    text_color = ListProperty((0, 0, 0, 1))


class DrawerList(ThemableBehavior, MDList):
    def set_color_item(self, instance_item):
        for item in self.children:
            if item.text_color == self.theme_cls.primary_color:
                item.text_color = self.theme_cls.text_color
                break
        instance_item.text_color = self.theme_cls.primary_color


class BHT(MDApp):
    def build(self):
        self.title = "Bird Hazard Tracking"
        self.theme_cls.primary_palette = "Green"
        return Builder.load_string(nav_drawer)

    def on_start(self):
        icons_item = {
            "map": "Carte",
            "equalizer": "Statistiques",
            "calendar": "Calendrier",
            "help-circle": "Tutoriel",
            "copyright": "Crédits",
        }
        for icon_name in icons_item.keys():
            self.root.ids.content_drawer.ids.md_list.add_widget(
                ItemDrawer(icon=icon_name, text=icons_item[icon_name])
            )


BHT().run()

Stylesheet.py

nav_drawer = """
<ItemDrawer>:
    theme_text_color: "Custom"
    on_release: 
        self.parent.set_color_item(self)
        #I would like to put an action which can associate screen with each chosen button here. 
        #But if it's not possile I'm open to every simply solution.
          
    IconLeftWidget:
        id: icon
        icon: root.icon
        theme_text_color: "Custom"
        text_color: root.text_color


<ContentNavigationDrawer>:
    orientation: "vertical"
    padding: "10dp"
    spacing: "10dp"
     
    MDLabel:
        text: "Navigation"
        font_style: "Button"
        size_hint: 0.5, 0.1
        height: self.texture_size[1]
        
    ScrollView:
        DrawerList:
            id: md_list

Screen:
    NavigationLayout:
        ScreenManager:
            id : screen_manager
            Screen:
                name : "map"
                BoxLayout:
                    orientation: 'vertical'

                    MDToolbar:
                        title: "Bird Hazard Tracking"
                        elevation: 10
                        left_action_items: [['menu', lambda x: nav_drawer.set_state()]]
                    
                    MDLabel :
                        text : "Map"
                        
            Screen:
                name : "stats"
                BoxLayout:
                    orientation: 'vertical'

                    MDToolbar:
                        title: "                                                  Bird Hazard Tracking"
                        elevation: 10
                        left_action_items: [['menu', lambda x: nav_drawer.set_state()]]
                    
                    MDLabel :
                        text : "Stats"
            
            Screen:
                name : "cal"
                BoxLayout:
                    orientation: 'vertical'

                    MDToolbar:
                        title: "                                                  Bird Hazard Tracking"
                        elevation: 10
                        left_action_items: [['menu', lambda x: nav_drawer.set_state()]]
                        
                    MDLabel :
                        text : "Calendrier"

                    Widget:
                    
            Screen:
                name : "tuto"
                BoxLayout:
                    orientation: 'vertical'

                    MDToolbar:
                        title: "                                                  Bird Hazard Tracking"
                        elevation: 10
                        left_action_items: [['menu', lambda x: nav_drawer.set_state()]]
                        
                    MDLabel :
                        text : "Tuto"    

                    Widget:
                    
            Screen:
                name : "cred"
                BoxLayout:
                    orientation: 'vertical'

                    MDToolbar:
                        title: "                                                  Bird Hazard Tracking"
                        elevation: 10
                        left_action_items: [['menu', lambda x: nav_drawer.set_state()]]

                    MDLabel :
                        text : "Crédits"
                     
                    Widget:
                    
        MDNavigationDrawer:
            id: nav_drawer

            ContentNavigationDrawer:
                id: content_drawer
"""

感谢您花费时间和精力来制定应对措施。

0 个答案:

没有答案