>source

아래 code는 내가 작성한 데모입니다. 내가 달성하고 싶은 것은 다른 탭을 사용하기 전에 첫 번째 탭에서 버튼을 클릭해야 한다는 것입니다. 버튼을 클릭하지 않고 다른 탭으로 이동하려고 하면 메시지가 표시되고 첫 번째 탭으로 이동합니다. 문제는 메시지가 표시되지만 첫 번째 탭으로 돌아가려면 한 번 더 클릭해야한다는 것입니다. 문제를 해결하는 방법에 대한 아이디어가 있습니까? 미리 감사드립니다!

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()

  • 답변 # 1

    이 안에 무엇이 들어 있는지 검색한 후MDTab, 나는 찾았다MD탭바그리고 나는 이것을 열 때 이것을 비활성화하기로 결정했습니다. 첫 번째 탭에서 버튼을 클릭한 후 활성화합니다.

    test.py:

    from kivymd.app import MDApp
    from kivymd.uix.floatlayout import MDFloatLayout
    from kivymd.uix.tab import MDTabsBase
    from kivy.uix.screenmanager import Screen,ScreenManager
    from kivy.properties import StringProperty,ObjectProperty
    from kivy.clock import Clock
    class S1(Screen):
        mdtabs= ObjectProperty()
        def on_enter(self, *args):
            Clock.schedule_once(self.settings)
        def settings(self,*args):
            print(self.mdtabs.children[0])
            self.mdtabs.children[0].disabled= True
        def fu(self):
            self.mdtabs.children[0].disabled= False
    class SM(ScreenManager):
        pass
    class Tab(MDFloatLayout, MDTabsBase):
        pass
    class test(MDApp):
        def build(self):
            return SM()
    if __name__== '__main__':
        test().run()
    

    test.kv:

    :
        S1:
            name: 'p1'
    :
        mdtabs:mdtabs
        MDTabs:
            id: mdtabs
            Tab:
                title: 'Tab1'
                Button:
                    text: 'Click me'
                    on_release: root.fu()
            Tab:
                title: 'Tab2'
    

  • 이전 javascript : PDFJS.PDFLinkService는 함수가 아닙니다.
  • 다음 node.js : Express에서 "require(x)" 대신 "import x"를 위한 환경을 준비하는 쉬운 방법은 무엇입니까?