首页 > 解决方案 > kivy底部工具栏等多屏

问题描述

两件事: 1 - 我想知道这是否是实现我想要的正确方法。切换屏幕时持续底部Appbar

2 - 我不知道如何删除底部 AppBar 顶部的额外填充。(bottomAppBar 和按钮之间的空白,见下文)

主文件

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()

多.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

在此处输入图像描述

谢谢

标签: pythonkivykivymd

解决方案


您可以AppBar通过不将其包含在您的Screens. 您可以通过添加到您MainWindow的:ScreenManagerMDBottomAppBarMainWindowkv

<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()方法只返回MainWindow()

class TestApp(MDApp):

    def build(self):
        return MainWindow()

推荐阅读