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

Ссылка скопирована
1 ответ

Изучаю 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()

Дополнительно:

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Юрий Linux Ответ

Для создания функции переключения экранов на веб-сайте, вам необходимо использовать 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';
  }
}

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>

<div class="screen" id="screen1">Экран 1</div> <div class="screen" id="screen2">Экран 2</div> <div class="screen" id="screen3">Экран 3</div>

Вызовите функцию switchScreen() с идентификатором экрана, который вы хотите показать:

switchScreen('screen2');

switchScreen('screen2');

Таким образом, вы можете легко переключать экраны на вашем веб-сайте с помощью этой функции. Не забудьте добавить стили для экранов и улучшить функционал в соответствии с вашими потребностями.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно