问题描述
我需要获取当前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