注意:底部工具栏 这基本上是屏幕
kivy Bottom Toolbar et multi screen
两件事:
1 - 我想知道这是否是实现我想要的目标的正确方法。切换屏幕时持久底部Appbar
2 - 我不知道如何删除底部 AppBar 顶部的额外填充。 (bottomAppBar 和按钮之间的白色 space,见下文)
main.py
from kivymd.app import MDApp
from kivy.lang import Builder
from kivy.uix.screenmanager import ScreenManager, Screen
Builder.load_file("multi.kv")
class MainWindow(Screen):
pass
# Declare both screens
class MenuScreen(Screen):
pass
class SettingsScreen(Screen):
pass
class TestApp(MDApp):
def build(self):
# Create the screen manager
sm = ScreenManager()
sm.add_widget(MenuScreen(name='menu'))
sm.add_widget(SettingsScreen(name='settings'))
return sm
if __name__ == '__main__':
TestApp().run()
multi.kv
<MDBottomAppBar>:
MDToolbar:
title: "test"
left_action_items : [["menu", lambda x: print("menu pressed")]]
right_action_items : [["dots-vertical", lambda x: print("dots print")]]
icon: 'account'
icon_color : [1,0,0]
<MenuScreen>:
BoxLayout:
orientation: "vertical"
BoxLayout:
Button:
text: 'Goto settings'
on_press:
root.manager.transition.direction = 'left'
root.manager.current = 'settings'
Button:
text: 'Quit'
MDBottomAppBar
<SettingsScreen>:
BoxLayout:
orientation: "vertical"
BoxLayout:
Button:
text: 'My settings button'
Button:
text: 'Back to menu'
on_press:
root.manager.transition.direction = 'right'
root.manager.current = 'menu'
MDBottomAppBar
谢谢
您可以通过不将其包含在 Screens
中来获得持久性 AppBar
。您可以通过将 MainWindow
添加到 kv
:
来获得包含 ScreenManager
和 MDBottomAppBar
的 MainWindow
<MDBottomAppBar>:
MDToolbar:
title: "test"
left_action_items : [["menu", lambda x: print("menu pressed")]]
right_action_items : [["dots-vertical", lambda x: print("dots print")]]
icon: 'account'
icon_color : [1,0,0,1]
<MenuScreen>:
BoxLayout:
orientation: "vertical"
BoxLayout:
Button:
text: 'Goto settings'
on_press:
root.manager.transition.direction = 'left'
root.manager.current = 'settings'
Button:
text: 'Quit'
# MDBottomAppBar
<SettingsScreen>:
BoxLayout:
orientation: "vertical"
BoxLayout:
Button:
text: 'My settings button'
Button:
text: 'Back to menu'
on_press:
root.manager.transition.direction = 'right'
root.manager.current = 'menu'
# MDBottomAppBar
<MainWindow>:
ScreenManager:
size_hint_y: None
height: root.height - appbar.height
y: appbar.top
MenuScreen:
name: 'menu'
SettingsScreen:
name: 'settings'
MDBottomAppBar:
id: appbar
现在 build()
方法只是 returns MainWindow()
:
class TestApp(MDApp):
def build(self):
return MainWindow()
两件事: 1 - 我想知道这是否是实现我想要的目标的正确方法。切换屏幕时持久底部Appbar
2 - 我不知道如何删除底部 AppBar 顶部的额外填充。 (bottomAppBar 和按钮之间的白色 space,见下文)
main.py
from kivymd.app import MDApp
from kivy.lang import Builder
from kivy.uix.screenmanager import ScreenManager, Screen
Builder.load_file("multi.kv")
class MainWindow(Screen):
pass
# Declare both screens
class MenuScreen(Screen):
pass
class SettingsScreen(Screen):
pass
class TestApp(MDApp):
def build(self):
# Create the screen manager
sm = ScreenManager()
sm.add_widget(MenuScreen(name='menu'))
sm.add_widget(SettingsScreen(name='settings'))
return sm
if __name__ == '__main__':
TestApp().run()
multi.kv
<MDBottomAppBar>:
MDToolbar:
title: "test"
left_action_items : [["menu", lambda x: print("menu pressed")]]
right_action_items : [["dots-vertical", lambda x: print("dots print")]]
icon: 'account'
icon_color : [1,0,0]
<MenuScreen>:
BoxLayout:
orientation: "vertical"
BoxLayout:
Button:
text: 'Goto settings'
on_press:
root.manager.transition.direction = 'left'
root.manager.current = 'settings'
Button:
text: 'Quit'
MDBottomAppBar
<SettingsScreen>:
BoxLayout:
orientation: "vertical"
BoxLayout:
Button:
text: 'My settings button'
Button:
text: 'Back to menu'
on_press:
root.manager.transition.direction = 'right'
root.manager.current = 'menu'
MDBottomAppBar
谢谢
您可以通过不将其包含在 Screens
中来获得持久性 AppBar
。您可以通过将 MainWindow
添加到 kv
:
ScreenManager
和 MDBottomAppBar
的 MainWindow
<MDBottomAppBar>:
MDToolbar:
title: "test"
left_action_items : [["menu", lambda x: print("menu pressed")]]
right_action_items : [["dots-vertical", lambda x: print("dots print")]]
icon: 'account'
icon_color : [1,0,0,1]
<MenuScreen>:
BoxLayout:
orientation: "vertical"
BoxLayout:
Button:
text: 'Goto settings'
on_press:
root.manager.transition.direction = 'left'
root.manager.current = 'settings'
Button:
text: 'Quit'
# MDBottomAppBar
<SettingsScreen>:
BoxLayout:
orientation: "vertical"
BoxLayout:
Button:
text: 'My settings button'
Button:
text: 'Back to menu'
on_press:
root.manager.transition.direction = 'right'
root.manager.current = 'menu'
# MDBottomAppBar
<MainWindow>:
ScreenManager:
size_hint_y: None
height: root.height - appbar.height
y: appbar.top
MenuScreen:
name: 'menu'
SettingsScreen:
name: 'settings'
MDBottomAppBar:
id: appbar
现在 build()
方法只是 returns MainWindow()
:
class TestApp(MDApp):
def build(self):
return MainWindow()