Kivymd 扩展面板未显示
Kivy: MDExpansion panel isn't shown
我需要创建一个屏幕作为测试结果的历史记录,它位于另一个屏幕中。我想使用 MDExpansionPanel,但是当我编写代码时没有显示任何内容。屏幕是空的我不知道为什么,有人可以帮我吗?
在main.py
class GoalsScreen(Screen):
pass
class Content(BoxLayout):
pass
class HistoryScreen(Screen):
def on_start(self):
names = ["test1", "test2", "test3"]
for name in names:
panel= MDExpansionPanel(icon="1.png",title= name,
content=Content())
self.root.ids.panel_container.add_widget(panel)
class MainApp(MDApp):
def build(self):
self.theme_cls.primary_palette = "Red"
self.theme_cls.primary_hue = "500"
self.theme_cls.theme_style = "Light"
screen = Builder.load_string(screen_helper)
return screen
MainApp().run()
在 .kv 中
screen_helper = """
ScreenManager:
GoalsScreen:
HistoryScreen:
<GoalsScreen>:
name: "goals"
Button:
text: "next page"
on_press: root.manager.current= "history"
<Content>
size_hint: 1,None
height: self.minimum_height
Button:
size_hint: None, None
MDIconButton:
icon: "close"
<HistoryScreen>:
name: "history"
BoxLayout:
ScrollView:
GridLayout:
cols: 1
size_hint_y: None
height: self.minimum_height
id: panel_container
您的代码有几个问题:
- 从未调用
on_start()
方法(不会自动调用 Screen
)。
title= name
不是 MDExpansionPanel
的合法参数。
- 缺少
panel_cls
到 MDExpansionPanel
所需的参数。
HistoryScreen
没有 root
属性,因此此代码将失败:self.root.ids.panel_container.add_widget(panel)
尝试这样的事情:
class HistoryScreen(Screen):
def on_enter(self):
self.ids.panel_container.clear_widgets() # to avoid re-adding panel each time
names = ["test1", "test2", "test3"]
for name in names:
panel= MDExpansionPanel(icon="1.png",panel_cls=MDExpansionPanelOneLine(),
content=Content())
self.ids.panel_container.add_widget(panel)
我需要创建一个屏幕作为测试结果的历史记录,它位于另一个屏幕中。我想使用 MDExpansionPanel,但是当我编写代码时没有显示任何内容。屏幕是空的我不知道为什么,有人可以帮我吗?
在main.py
class GoalsScreen(Screen):
pass
class Content(BoxLayout):
pass
class HistoryScreen(Screen):
def on_start(self):
names = ["test1", "test2", "test3"]
for name in names:
panel= MDExpansionPanel(icon="1.png",title= name,
content=Content())
self.root.ids.panel_container.add_widget(panel)
class MainApp(MDApp):
def build(self):
self.theme_cls.primary_palette = "Red"
self.theme_cls.primary_hue = "500"
self.theme_cls.theme_style = "Light"
screen = Builder.load_string(screen_helper)
return screen
MainApp().run()
在 .kv 中
screen_helper = """
ScreenManager:
GoalsScreen:
HistoryScreen:
<GoalsScreen>:
name: "goals"
Button:
text: "next page"
on_press: root.manager.current= "history"
<Content>
size_hint: 1,None
height: self.minimum_height
Button:
size_hint: None, None
MDIconButton:
icon: "close"
<HistoryScreen>:
name: "history"
BoxLayout:
ScrollView:
GridLayout:
cols: 1
size_hint_y: None
height: self.minimum_height
id: panel_container
您的代码有几个问题:
- 从未调用
on_start()
方法(不会自动调用Screen
)。 title= name
不是MDExpansionPanel
的合法参数。- 缺少
panel_cls
到MDExpansionPanel
所需的参数。 HistoryScreen
没有root
属性,因此此代码将失败:self.root.ids.panel_container.add_widget(panel)
尝试这样的事情:
class HistoryScreen(Screen):
def on_enter(self):
self.ids.panel_container.clear_widgets() # to avoid re-adding panel each time
names = ["test1", "test2", "test3"]
for name in names:
panel= MDExpansionPanel(icon="1.png",panel_cls=MDExpansionPanelOneLine(),
content=Content())
self.ids.panel_container.add_widget(panel)