im wondering if it is possible to have a Tabbed Panel permanently even though im switching between screens? Ive tried having the TabbedPanel outside the mainscreen, on a different class and so on. So far when i switch to the FirstScreen the TabbedPanel disapears.
Python:
from kivy.app import App
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.uix.tabbedpanel import TabbedPanel
class TabbedTest(TabbedPanel):
pass
class MainScreen(Screen):
pass
class Firstscreen(Screen):
pass
class Secondscreen(Screen):
pass
class myapp(App):
def build(self):
# Create the screen manager
sm = ScreenManager()
sm.add_widget(MainScreen(name='main'))
sm.add_widget(Firstscreen(name='first'))
sm.add_widget(Secondscreen(name='second'))
return sm
if __name__ == '__main__':
myapp().run()
kv:
<TabbedTest>:
do_default_tab: False
TabbedPanelItem:
text:"test"
<MainScreen>:
BoxLayout:
Button:
text: 'first'
on_press: root.manager.current = 'first'
Button:
text: 'second'
on_press: root.manager.current = 'second'
<Firstscreen>:
BoxLayout:
Label:
text:"first"
Button:
text: 'Back to main'
on_press: root.manager.current = 'main'
<Secondscreen>:
BoxLayout:
Label:
text:'second'
Button:
text: 'Back to main'
on_press: root.manager.current = 'main'
Rather than adding the TabbedTest
to each Screen
, just make the TabbedTest
and ScreenManager
as children of the root widget of the App
. One way to do this is to modify the build()
method:
def build(self):
root = FloatLayout()
self.tabbedtest = TabbedTest(size_hint_y=0.5, pos_hint={'top': 1.0}) # later you can use self.tabbedtest to add more tabs
root.add_widget(self.tabbedtest)
# Create the screen manager
sm = ScreenManager(size_hint_y=0.5, pos_hint={'y': 0})
sm.add_widget(MainScreen(name='main'))
sm.add_widget(Firstscreen(name='first'))
sm.add_widget(Secondscreen(name='second'))
root.add_widget(sm)
return root
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.