简体   繁体   English

kivy:是否可以在不同的屏幕上使用相同的选项卡式面板?

[英]kivy: Is it possible to have the same Tabbed Panel on different screens?

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.我已经尝试在主屏幕之外,在不同的班级等上使用 TabbedPanel。 So far when i switch to the FirstScreen the TabbedPanel disapears.到目前为止,当我切换到 FirstScreen 时,TabbedPanel 消失了。

Python: 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 .而不是将TabbedTest添加到每个Screen ,只需将TabbedTestScreenManager作为App的根小部件的子级。 One way to do this is to modify the build() method:一种方法是修改build()方法:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM