Задать вопрос
@White_Bambie

Как сделать функцию переключения экранов?

Изучаю kivyMD на платформе Stepik. Параллельно изучаю оф. документацию. Возник вопрос, как можно сделать переключение экранов. Пробовал с помощью on_release в NavigationDrawerItem, но не могу найти информацию, как правильно написать код, чтобы функция работала. Я понимаю, что данный код выполняется с помощью команды _.current, но в данном коде не понимаю, как это реализовать. Код скопировал для обучения с оф. документации kivyMD. Помогите советом, пожалуйста.

Код
from kivymd.app import MDApp
from kivymd.uix.navigationdrawer import (
    MDNavigationLayout,
    MDNavigationDrawer,
    MDNavigationDrawerMenu,
    MDNavigationDrawerHeader,
    MDNavigationDrawerLabel,
    MDNavigationDrawerDivider,
    MDNavigationDrawerItem,
)
from kivymd.uix.screen import MDScreen
from kivymd.uix.screenmanager import MDScreenManager
from kivymd.uix.toolbar import MDTopAppBar
from kivymd.uix.bottomnavigation import MDBottomNavigation, MDBottomNavigationItem
from kivymd.uix.label import MDLabel
from kivymd.uix.boxlayout import MDBoxLayout


class BaseNavigationDrawerItem(MDNavigationDrawerItem):
    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        self.radius = 24
        self.text_color = "#4a4939"
        self.icon_color = "#4a4939"
        self.focus_color = "#e7e4c0"


class DrawerLabelItem(BaseNavigationDrawerItem):
    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        self.focus_behavior = False
        self._no_ripple_effect = True
        self.selected_color = "#4a4939"


class MDNavigationDrawerItem(BaseNavigationDrawerItem):
    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        self.ripple_color = "#c5bdd2"
        self.radius = 2
        self.selected_color = "#0c6c4d"


class Example(MDApp):
    def on_switch_tabs(
        self,
        bar: MDNavigationDrawer,
        item: MDNavigationDrawerItem,
        item_icon: str,
        item_text: str,
    ):
        self.root.get_ids().screen_manager.current = item_text

    def build(self):
        self.theme_cls.theme_style = "Dark"
        return (
            MDScreen(
                MDBottomNavigation(
                    MDBottomNavigationItem(
                        name="space",
                        text="space",
                        icon="map"
                    )
                ),
                MDScreenManager(
                    MDScreen(
                        MDLabel(text="1"),
                        name="one"
                    ),
                    MDScreen(
                        MDLabel(text="2"),
                        name="two"
                    ),
                    id="page"
                ),
                MDNavigationLayout(
                    MDScreenManager(
                        MDScreen(
                            MDTopAppBar(
                                # title="Navigation Drawer",
                                elevation=4,
                                pos_hint={"top": 1},
                                md_bg_color="#e7e4c0",
                                specific_text_color="#4a4939",
                                left_action_items=[
                                    ['menu', lambda x: self.nav_drawer_open()]
                                ],
                            )
                        )
                    ),
                    MDNavigationDrawer(
                        MDNavigationDrawerMenu(
                            MDNavigationDrawerHeader(
                                title="Header title",
                                title_color="#4a4939",
                                text="Header text",
                                spacing="4dp",
                                padding=("12dp", 0, 0, "56dp"),
                            ),
                            MDNavigationDrawerLabel(
                                text="Mail",
                            ),
                            MDNavigationDrawerItem(
                                icon="gmail",
                                right_text="+99",
                                text_right_color="#4a4939",
                                text="Inbox"
                            ),
                            MDNavigationDrawerItem(
                                icon="send",
                                text="Outbox",
                            ),
                            MDNavigationDrawerDivider(),
                            MDNavigationDrawerLabel(
                                text="Labels",
                            ),
                            DrawerLabelItem(
                                icon="information-outline",
                                text="Label",
                            ),
                            DrawerLabelItem(
                                icon="information-outline",
                                text="Label",
                            ),
                        ),
                        id="nav_drawer",
                        radius=(0, 0, 0, 0),
                    )
                )
            )
        )

    def nav_drawer_open(self, *args):
        nav_drawer = self.root.children[0].ids.nav_drawer
        nav_drawer.set_state("open")


Example().run()
  • Вопрос задан
  • 69 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы