Newb ie вот так, я извиняюсь, если идея, которую я пробую, немного не в порядке.
Итак, я пытаюсь создать приложение, используя KivyMD, и я уже мимо части, где вы можете разблокировать приложение, а затем перейти к экрану, который содержит навигационный ящик. Однако, поскольку (в отличие от примера, приведенного для приложения NavigationDrawer здесь https://github.com/HeaTTheatR/KivyMD/wiki/Components-Navigation-Drawer, где NavigationDrawer - это фактический root класса MDApp), мое приложение запускается с экрана «разблокировки» и только после того, как оно разблокируется появится экран, содержащий NavigationDrawer и главный экран (для содержимого приложения). Моя проблема в том, что я не могу (или, скорее всего, я не знаю, как) добавить список параметров в NavigationDrawer. Ниже приведен мой реальный код, и мне трудно разобраться, куда поместить эту часть, чтобы она работала при каждом открытии NavigationDrawer:
def on_start(self):
for items in {
"home-circle-outline": "Home",
"update": "Check for Update",
"settings-outline": "Settings",
"exit-to-app": "Exit",
}.items():
self.root.ids.content_drawer.ids.box_item.add_widget(
NavigationItem(
text=items[1],
icon=items[0],
)
)
Итак, у меня NavigationDrawer на другом экране (не root) и мне кажется, что мне придется внести некоторые изменения в эту часть:
`self.root.ids.content_drawer.ids.box_item.add_widget(
NavigationItem(
text=items[1],
icon=items[0],
)
)`
Если мой код .py для приложения приведен ниже, куда я должен поместить блок кода, упомянутый выше ( один для добавления интерактивных опций внутри NavigationDrawer)?
from kivymd.app import MDApp
from kivy.lang import Builder
from kivy.properties import ObjectProperty, StringProperty
from kivy.uix.boxlayout import BoxLayout
from kivymd.theming import ThemeManager
from kivy.uix.screenmanager import Screen, ScreenManager, FloatLayout
from kivymd.uix.list import ILeftBody, OneLineAvatarListItem
from kivymd.toast import toast
from kivy.uix.image import Image
loginscreen_kv = '''
#:import FadeTransition kivy.uix.screenmanager.FadeTransition
#:import Factory kivy.factory.Factory
LoginScreen:
scr_mngr: scr_mngr
ScreenManager:
id: scr_mngr
screen1: screen1
transition: FadeTransition()
orientation: 'vertical'
canvas:
Rectangle:
source: "deku_blur30.png"
size: self.size
pos: self.pos
Screen:
id: screen1
name: 'screen1'
username: username
password: password
MDCard:
size_hint: None, None
size: dp(520), dp(340)
pos_hint: {'center_x': 0.5, 'center_y': 0.5}
BoxLayout:
orientation:'vertical'
padding: dp(20)
spacing:20
MDLabel:
markup: True
text: '[b]Creator Login Credentials[/b] \\n [i]...so you can use the app[/i]'
theme_text_color: 'Primary'
size_hint_y: None
height: dp(36)
MDSeparator:
height: dp(5)
MDTextField:
id: username
hint_text: "Username "
helper_text_mode: "on_focus"
MDTextField:
id: password
hint_text: "Password "
helper_text_mode: "on_focus"
password: True
MDFlatButton:
text: "Unlock the App"
pos_hint: {'center_x': 0.5}
on_release: root.check_data_login()
MainAppScr:
<MainAppScr>:
name: 'main_app_scr'
ScreenManager:
id: screen_manager1
Screen:
name: 'screen1'
NavigationLayout:
ScreenManager:
id: screen_manager2
transition: FadeTransition()
Screen:
FloatLayout:
orientation: 'vertical'
canvas:
Rectangle:
source: "./dualface.jpeg"
size: self.size
pos: self.pos
MDToolbar:
title: "HeroAca"
background_color: app.theme_cls.primary_dark
pos_hint: {"top": 1}
elevation: 10
left_action_items: [['menu', lambda x: nav_drawer.toggle_nav_drawer()]]
MDNavigationDrawer:
id: nav_drawer
# find auto-dismiss function
auto_dismiss: True
ContentNavigationDrawer:
id: content_drawer
# insert NavigationDrawerIconButtons here
<Page2@Screen>:
name: "screen2"
FloatLayout:
size_hint: 0.98, 0.95
pos_hint: {'center_x': 0.5, 'center_y': 0.5}
canvas:
Rectangle:
#source: "./deku.jpg"
size: self.size
pos: self.pos
###
<NavigationItem>:
theme_text_color: 'Custom'
divider: None
IconLeftWidget:
icon: root.icon
<ContentNavigationDrawer>:
BoxLayout:
orientation: 'vertical'
FloatLayout:
size_hint_y: None
height: "200dp"
canvas:
Color:
rgba: app.theme_cls.primary_color
Rectangle:
#source: './deku.jpg'
pos: self.pos
size: self.size
# this is for the logo area of the drawer (inside the FloatLayout)
BoxLayout:
id: top_box
size_hint_y: None
height: "360dp"
padding: "10dp"
x: root.parent.x
pos_hint: {"top": 1}
Image:
# line below is for reference of how the original example mapped the kivymd logo
source: f"{images_path}kivymd_alpha.png"
#source: "./deku_transp.png"
MDIconButton:
icon: "close"
x: root.parent.x + dp(10)
pos_hint: {"top": 1}
on_release: root.parent.toggle_nav_drawer()
MDLabel:
markup: True
text: "[b]Teppy's Test App[/b]\\nVersion: 0.1"
pos_hint: {'center_y': .5}
pos_hint: {'top': .75}
x: root.parent.x + dp(10)
y: root.height - top_box.height + dp(10)
size_hint_y: None
height: self.texture_size[1]
ScrollView:
pos_hint: {"top": 1}
GridLayout:
id: box_item
cols: 1
size_hint_y: None
height: self.minimum_height
'''
class MainAppScr(Screen):
pass
class ContentNavigationDrawer(BoxLayout):
pass
class NavigationItem(OneLineAvatarListItem):
icon = StringProperty()
class LoginScreen(FloatLayout):
scr_mngr = ObjectProperty(None)
def check_data_login(self):
username = self.scr_mngr.screen1.username.text
password = self.scr_mngr.screen1.password.text
print(username)
print(password)
if username == "" and password == "": # set a username and pw to unlock the app
self.change_screen("main_app_scr")
def change_screen(self, screen, *args):
self.scr_mngr.current = screen
class MyHeroAcademia(MDApp):
title = "MyHeroAcademia App"
def __init__(self, **kwargs):
self.theme_cls.primary_palette = "Teal"
self.theme_cls.primary_accent = "BlueGray"
super().__init__(**kwargs)
def build(self):
return Builder.load_string(loginscreen_kv)
# find a way to get this to the nav drawer
"""
def on_start(self):
for items in {
"home-circle-outline": "Home",
"update": "Check for Update",
"settings-outline": "Settings",
"exit-to-app": "Exit",
}.items():
self.root.ids.content_drawer.ids.box_item.add_widget(
NavigationItem(
text=items[1],
icon=items[0],
)
)
"""
if __name__ =="__main__":
MyHeroAcademia().run()
В общем, я хочу, чтобы экран NavigationDrawer («MainAppScr» в моем коде) работал так же, как пример в документации. Вся помощь очень ценится!