1

我需要获取当前选项卡的名称。我检查了这个话题。并尝试了这段代码:

from kivy.lang import Builder
from kivy.uix.screenmanager import Screen, ScreenManager
from kivy.uix.floatlayout import FloatLayout
from kivymd.uix.tab import MDTabsBase
from kivymd.app import MDApp
kv = Builder.load_string("""
<SM>
    P1:
<P1>
    BoxLayout:
        orientation: 'vertical'
        MDToolbar:
            title: 'TEST'
        MDTabs:
            id: toolbar
            on_tab_switch: root.give_current_tab_name()
            Tab:
                text: 'Tab 1'
            Tab:
                text: 'Tab 2'
            Tab:
                text: 'Tab 3'
""")
class P1(Screen):
    def give_current_tab_name(self):
        print(self.ids.toolbar.carousel.current_slide.tab_label.text) #It gives previous tab name...
class Tab(FloatLayout,MDTabsBase):
    pass
class SM(ScreenManager):
    pass
class MyApp(MDApp):
    def build(self):
        return SM()
if __name__ == '__main__':
    MyApp().run()

但是,它给了我以前选项卡的名称。我应该使用 schedule_once(testfunc,delay_time) 检查当前选项卡的名称,还是有其他简单的方法可以做到这一点?

此外,我需要禁止滑动页面以更改选项卡。它只能来自顶部选项卡的名称。任何人都可以帮助我解决这些问题。已经谢谢了。。

4

1 回答 1

1

要获取选项卡名称,on_tab_switch 传递 4 个参数:

instance_tabs、instance_tab、instance_tab_label、tab_text

所以你可以写这样的东西:

MDTabs:
    id: toolbar
    on_tab_switch: root.give_current_tab_name(*args)

...

def give_current_tab_name(self, *args):
    tab_name = args[3] 

要禁止滑动,只需添加:

MDTabs:
    id: toolbar
    on_tab_switch: root.give_current_tab_name(*args)
    lock_swiping: True
于 2020-08-18T12:03:17.957 回答