【发布时间】:2022-01-07 05:22:23
【问题描述】:
下面的代码是我写的一个demo。我想要完成的是,在使用其他选项卡之前,我必须单击第一个选项卡中的按钮。如果未单击该按钮并且我尝试转到其他选项卡,则会显示一条消息,我将被引导到第一个选项卡。问题是将显示该消息,但我必须再单击一次才能返回第一个选项卡。知道如何解决吗?提前致谢!
from kivy.lang import Builder
from kivymd.app import MDApp
from kivymd.uix.floatlayout import MDFloatLayout
from kivymd.uix.button import MDRaisedButton
from kivymd.uix.tab import MDTabsBase
from kivymd.toast import toast
KV = '''
MDBoxLayout:
orientation: "vertical"
MDToolbar:
title: "Example Tabs"
MDTabs:
id: tabs
on_tab_switch: app.on_tab_switch(*args)
<Tab>
MDLabel:
id: label
text: "Tab 0"
halign: "center"
<Tab4test>
MDLabel:
id: label
text: "Tab 0"
halign: "center"
MDRaisedButton:
text: "Click me!!!"
on_release: root.change_flag()
'''
class Tab(MDFloatLayout, MDTabsBase):
'''Class implementing content for a tab.'''
class Tab4test(MDFloatLayout, MDTabsBase):
'''Class implementing content for a tab.'''
def change_flag(self):
MDApp.get_running_app().flag =1
toast("flag value changed to 1!")
class Example(MDApp):
flag = 0
def build(self):
return Builder.load_string(KV)
def on_start(self):
self.root.ids.tabs.add_widget(Tab4test(title=f"Tab 0"))
for i in range(1, 3):
self.root.ids.tabs.add_widget(Tab(title=f"Tab {i}"))
print(self.flag)
def on_tab_switch(
self, instance_tabs, instance_tab, instance_tab_label, tab_text
):
'''Called when switching tabs.
:type instance_tabs: <kivymd.uix.tab.MDTabs object>;
:param instance_tab: <__main__.Tab object>;
:param instance_tab_label: <kivymd.uix.tab.MDTabsLabel object>;
:param tab_text: text or name icon of tab;
'''
instance_tab.ids.label.text = tab_text
print(self.flag)
title = instance_tab.title
if title != f"Tab 0" and self.flag == 0:
toast("Please click the button in Tab 0 first!", duration=3)
#print(instance_tabs.carousel.slides)
#instance_tabs.carousel.load_slide(instance_tabs.carousel.slides[0])
instance_tabs.switch_tab("Tab 0", search_by="title")
Example().run()
【问题讨论】:
标签: python kivy kivy-language kivymd