如果我尝试使用 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()
来自 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()