KivyMD-MDTabs-如何获取当前活动的标签页名称?

问题描述

我需要获取当前Tab的名称。我检查了this topic。并尝试了这段代码

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)检查当前标签名称吗?或者还有其他简便的方法吗?

此外,我需要不允许为更改选项卡滑动页面。它必须仅来自顶部选项卡的名称。任何人都可以帮助我解决这些问题。已经谢谢了。

解决方法

要获取标签名称, 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