Linking ScreenManager to a different Widget

Jk edited this page Dec 15, 2015 · 2 revisions

Linking ScreenManager to a different Widget

Summary

  • author: Qua-non
  • kivy: >= 1.6.0

The idea of this snippet is to control the ScreenManager from a different widget. In this case a TabbedPanel. Here we::

  • Add the ScreenManager to the TabbedPanel
  • Store a screen name in every Tab
  • Ask ScreenManager to change the Screen in TabbedPanels switch_to method.
#!python
from kivy.app import App
from kivy.uix.tabbedpanel import TabbedPanel
from kivy.properties import ObjectProperty
from kivy.lang import Builder

Builder.load_string('''
<RootWidget>:
    manager: manager
    do_default_tab: False
    # add a ScreenManager to the panel
    ScreenManager:
        id: manager
        Screen:
            id: sc1
            name: 'screen_one'
            Button:
                text: 'screen one'
        Screen
            id: sc2
            name: 'screen_two'
            Button:
                text: 'Screen Two'
        Screen:
            id: sc3
            name: 'screen_three'
            Button:
                text: 'screen three'
    TabbedPanelHeader:
        text: sc1.name
        # store a screen name to link the tab to a screen
        screen: sc1.name
    TabbedPanelHeader:
        text: sc2.name
        screen: sc2.name
    TabbedPanelHeader:
        text: sc3.name
        screen: sc3.name
''')

class RootWidget(TabbedPanel):

    manager = ObjectProperty(None)

    def switch_to(self, header):
        # set the Screen manager to load  the appropriate screen
        # linked to the tab head instead of loading content
        self.manager.current = header.screen
        # we have to replace the functionality of the original switch_to
        self.current_tab.state = "normal"
        header.state = 'down'
        self._current_tab = header

class MainApp(App):

    def build(self):
        return RootWidget()


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

##Comments Add your comments here

Clone this wiki locally
You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
Press h to open a hovercard with more details.