Как обновить MDToolbar после смены экрана - PullRequest
0 голосов
/ 20 июня 2020

У меня на главном экране есть панель инструментов MDToolbar с двумя кнопками, и если экран меняется, мне нужно изменить кнопку на панели инструментов, когда текущий экран не является основным. Кнопка профиля на панели инструментов должна измениться на шеврон с определенным действием. Как это сделать с KivyMD?

main.kv

MainScreen:
screenManager: screenManager
toolbar: toolbar

BoxLayout:
    orientation: 'vertical'

    MDToolbar:
        id: toolbar
        pos_hint: {"top": 1}
        size_hint: 1, .1
        title: 'Main'
        elevation: 10
        md_bg_color: get_color_from_hex(hex_colormap["blue"])
        left_action_items: [] if root.isCurrentScreen('menuScreen') else [['chevron-left', lambda x: root.changeScreen('menuScreen', direction='right')]]
        right_action_items: [['settings', lambda x: root.changeScreen('settingsScreen')]] if root.isCurrentScreen('profileScreen') else [['account-circle-outline', lambda x: root.changeScreen('profileScreen')]]

    ScreenManager:
        id: screenManager
        MenuScreen:
            id: menuScreen
        ProfileScreen:
            id: profileScreen
        SettingsScreen:
            id: settingsScreen

И часть кода из main.py

class MainScreen(BoxLayout):
    screenManager = ObjectProperty(None)

    def changeScreen(self, screen, direction='left', *args):
        self.screenManager.current = screen
        self.screenManager.transition.direction = direction

    def isCurrentScreen(self, screen):
        print(self.screenManager.current == screen)
        return self.screenManager.current == screen

class MenuScreen(Screen):
    pass

class ProfileScreen(Screen):
    pass

class SettingsScreen(Screen):
    pass

class MyApp(MDApp):
    def __init__(self, **kwargs):
        super().__init__(**kwargs)

    def build(self):
        return Builder.load_file('main.kv')

if __name__ == '__main__':
    MyApp().run()
...