Как сделать функцию переключения экранов?
Изучаю 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() |
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()
Дополнительно:
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Для создания функции переключения экранов на веб-сайте, вам необходимо использовать JavaScript. Вот пример простой функции переключения экранов с помощью JavaScript:
function switchScreen(screenId) { // Скрыть все экраны var screens = document.querySelectorAll('.screen'); screens.forEach(function(screen) { screen.style.display = 'none'; }); // Показать только выбранный экран var selectedScreen = document.getElementById(screenId); if (selectedScreen) { selectedScreen.style.display = 'block'; } }
Этот код скрывает все экраны на странице, затем показывает только выбранный экран с помощью переданного идентификатора.
Чтобы использовать эту функцию, вам нужно иметь HTML-разметку с экранами, которые вы хотите переключать, например:
<div class="screen" id="screen1">Экран 1</div> <div class="screen" id="screen2">Экран 2</div> <div class="screen" id="screen3">Экран 3</div>
Вызовите функцию switchScreen() с идентификатором экрана, который вы хотите показать:
switchScreen('screen2');
Таким образом, вы можете легко переключать экраны на вашем веб-сайте с помощью этой функции. Не забудьте добавить стили для экранов и улучшить функционал в соответствии с вашими потребностями.