如果我尝试使用 clear_widgets 函数清除动态添加的选项卡,我会得到一个错误(mdtabs can remove only subclass of MDTabslabel or MDTabsBase

If I try to clear dynamically added tabs using clear_widgets function I get an error(mdtabs can remove only subclass of MDTabslabel or MDTabsBase

来自 kivy.lang 导入生成器 从 kivy.uix.scrollview 导入 ScrollView

从 kivymd.app 导入 MDApp from kivymd.uix.tab import MDTabsBasefrom kivy.lang import Builder from kivy.uix.scrollview import ScrollView

从 kivymd.app 导入 MDApp 从 kivymd.uix.tab 导入 MDTabsBase

KV = MDBoxLayout:方向:“垂直”

MDToolbar:
    title: "Example Tabs"

MDTabs:
    id: tabs
MDList:

    MDBoxLayout:
        adaptive_height: True

        MDFlatButton:
            text: "ADD TAB"
            on_release: app.add_tab()

        MDFlatButton:
            text: "REMOVE LAST TAB"
            on_release: app.remove_tab()

        MDFlatButton:
            text: "GET TAB LIST"
            on_release: app.get_tab_list()

class 选项卡(滚动视图,MDTabsBase): 通过

class 示例(MDApp): 索引 = 0

def build(self):
    return Builder.load_string(KV)

def on_start(self):
    self.add_tab()

def get_tab_list(self):
    pass

    print(self.root.ids.tabs.get_tab_list())

def add_tab(self):
    self.index += 1
    self.root.ids.tabs.add_widget(Tab(text=f"{self.index} tab"))

def remove_tab(self):
    if self.index > 1:
        self.index -= 1
    self.root.ids.tabs.clear_widgets()

例子().运行()

在我看来,这是 MDTabs 代码中的错误。 MDTabs 小部件的结构包含 MDTabBar 作为 MDTabs 的子项。 clear_widgets() 代码尝试删除 MDTabBar,但是当您尝试删除 MDTabBar 时,MDTabs 代码将始终引发 Exception。当您在 MDTabs 上使用 add_widget() 时,新添加的小部件将添加到 MDTabBar 内的 MDGridLayout,因此您可以在 [=] 上使用 clear_widgets() 22=] 而不是整个 MDTabs。这是使用该方法的 remove_tab() 方法的修改版本:

def remove_tab(self):
    if self.index > 1:
        self.index -= 1
    self.root.ids.tabs.ids.layout.clear_widgets()