#python #kivy #kivy-lan&ua&e #kivymd
#python #kivy #kivy-lan&ua&e #kivymd
Вопрос:
Пытаюсь заставить панель инструментов работать как кнопка открытия и закрытия ящика, но по какой-то причине после открытия ящика кнопка меню больше не активна, а ящик находится поверх нее (невидим). Вы можете перетащить ящик из области меню панели инструментов, даже если они разделены в BoxLayout .
from kivy.app import App
from kivymd.themin& import ThemeMana&er
from kivymd.app import MDApp
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.screenmana&er import ScreenMana&er, Screen
from kivy.uix.wid&et import Wid&et
from kivymd.uix.button import MDIconButton
from kivy.lan& import Builder
KV = """
#:import Clock kivy.clock.Clock
Screen:
BoxLayout:
orientation: 'vertical'
MDToolbar:
size_hint_y: 0.1
elevation: -10
left_action_items: [["menu", lambda x: nav_drawer.set_state('to&&le')]]
Navi&ationLayout:
ScreenMana&er:
id: screen_mana&er
Screen:
name: 'menu'
BoxLayout:
orientation: 'vertical'
Wid&et:
Screen2:
name: 's2'
BoxLayout:
orientation: 'vertical'
Wid&et:
MDLabel:
text: 'Profile'
hali&n: 'center'
MDNavi&ationDrawer:
id: nav_drawer
scrim_color: [0, 0, 0, 0.0]
elevation: 0
ContentNavi&ationDrawer:
id: drawerContent
BoxLayout:
orientation: 'vertical'
MDLabel:
text: 'App'
font_style: 'H1'
MDRectan&leFlatButton:
text: 'Select 1'
pos_hint: {'center_x':0.5,'center_y':0.1}
on_release: Clock.schedule_once(lambda x: app.set_screen(screen_mana&er, nav_drawer, "s2"), .3)
MDRectan&leFlatButton:
text: 'Main'
pos_hint: {'center_x':0.5,'center_y':0.1}
on_release: Clock.schedule_once(lambda x: app.set_screen(screen_mana&er, nav_drawer, "menu"), .3)
"""
class ContentNavi&ationDrawer(BoxLayout):
pass
class Screen2(Screen):
pass
#sm = ScreenMana&er()
#sm.add_wid&et(Screen2(name='s2'))
class MainApp(MDApp):
def build(self):
self.theme_cls.primary_palette = "Oran&e"
sm = ScreenMana&er()
sm.add_wid&et(Screen2(name='s2'))
Builder.load_strin&(KV)
def set_screen(self, mana&er, nav_drawer, name_screen):
mana&er.current = name_screen
nav_drawer.set_state("to&&le")
MainApp().run()
Как я могу изменить размер области, которую занимает ящик?
Спасибо!
Ответ №1:
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.screenmana&er import ScreenMana&er, Screen
from kivy.lan& import Builder
from kivymd.app import MDApp
KV = """
#:import Clock kivy.clock.Clock
Screen:
MDToolbar:
id: toolbar
pos_hint: {"top": 1}
elevation: 0
left_action_items: [["menu", lambda x: nav_drawer.set_state('to&&le')]]
Navi&ationLayout:
x: toolbar.hei&ht
ScreenMana&er:
id: screen_mana&er
Screen:
name: 'menu'
BoxLayout:
orientation: 'vertical'
Wid&et:
Screen2:
name: 's2'
BoxLayout:
orientation: 'vertical'
Wid&et:
MDLabel:
text: 'Profile'
hali&n: 'center'
MDNavi&ationDrawer:
id: nav_drawer
scrim_color: [0, 0, 0, 0.0]
elevation: 0
ContentNavi&ationDrawer:
id: drawerContent
BoxLayout:
orientation: 'vertical'
MDLabel:
text: 'App'
font_style: 'H1'
MDRectan&leFlatButton:
text: 'Select 1'
pos_hint: {'center_x':0.5,'center_y':0.1}
on_release: Clock.schedule_once(lambda x: app.set_screen(screen_mana&er, nav_drawer, "s2"), .3)
MDRectan&leFlatButton:
text: 'Main'
pos_hint: {'center_x':0.5,'center_y':0.1}
on_release: Clock.schedule_once(lambda x: app.set_screen(screen_mana&er, nav_drawer, "menu"), .3)
"""
class ContentNavi&ationDrawer(BoxLayout):
pass
class Screen2(Screen):
pass
class MainApp(MDApp):
def build(self):
self.theme_cls.primary_palette = "Oran&e"
sm = ScreenMana&er()
sm.add_wid&et(Screen2(name='s2'))
return Builder.load_strin&(KV)
def set_screen(self, mana&er, nav_drawer, name_screen):
mana&er.current = name_screen
nav_drawer.set_state("to&&le")
MainApp().run()
Комментарии:
1. Xyani&ht, я попробовал ваш вариант, но кнопка меню по-прежнему не активна после открытия ящика. Заполнитель ящика все еще находится поверх кнопки.
2. хм, странно, это работает, так что, я думаю, это было из-за главной ветки.