如何 link 筛选以列出 Kivymd 列表中的项目
How to link screen to list items in a Kivymd list
我正在使用 ScreenManager。我想 link OneLineListItem 中的项目到新屏幕。
这是我的 KV 文件
screen_helper = """
ScreenManager:
GroupsScreen:
MyGroupScreen:
<GroupsScreen>:
name: 'groups'
ScrollView:
MDList:
id: container_groups
<MyGroupScreen>:
name: 'my_group'
ScrollView:
MDList:
id: container_group
MDRectangleFlatButton:
text: 'Back'
pos_hint: {'center_x':0.5,'center_y':0.1}
on_press: root.manager.current = 'groups'
这是 python 文件
class GroupsScreen(Screen):
def on_enter(self, *args):
for i in range(5):
item = OneLineListItem(text='Gruppo ' + str(i))
self.ids.container_groups.add_widget(item)
class MyGroupScreen(Screen):
pass
sm = ScreenManager()
sm.add_widget(GroupsScreen(name='groups'))
sm.add_widget(MyGroupScreen(name='my_group'))
class DemoApp(MDApp):
def build(self):
self.theme_cls.primary_palette = "Red"
self.theme_cls.primary_hue = "500"
screen = Builder.load_string(screen_helper)
return screen
我想单击组屏幕中的项目并转到 MyGroupScreen。
OneLineListItem
class 实际上扩展了 ButtonBehavior
,因此您可以将其视为 Button
。只需将 on_press
或 on_release
方法分配给 OneLineListItem
:
class GroupsScreen(Screen):
def on_kv_post(self, *args):
for i in range(5):
item = OneLineListItem(text='Gruppo ' + str(i))
item.on_release = self.switch_to_my_groups
self.ids.container_groups.add_widget(item)
def switch_to_my_groups(self, *args):
self.manager.current = 'my_group'
我将您的 on_enter()
方法更改为 on_kv_post()
以确保 kv
规则已被执行(以便 ids
可用)。
另一个问题是线条:
sm = ScreenManager()
sm.add_widget(GroupsScreen(name='groups'))
sm.add_widget(MyGroupScreen(name='my_group'))
应删除这些行。他们尝试构建 GUI,但结果未被使用。该行:
screen = Builder.load_string(screen_helper)
然后再次重建GUI,这次真的用到了
我正在使用 ScreenManager。我想 link OneLineListItem 中的项目到新屏幕。
这是我的 KV 文件
screen_helper = """
ScreenManager:
GroupsScreen:
MyGroupScreen:
<GroupsScreen>:
name: 'groups'
ScrollView:
MDList:
id: container_groups
<MyGroupScreen>:
name: 'my_group'
ScrollView:
MDList:
id: container_group
MDRectangleFlatButton:
text: 'Back'
pos_hint: {'center_x':0.5,'center_y':0.1}
on_press: root.manager.current = 'groups'
这是 python 文件
class GroupsScreen(Screen):
def on_enter(self, *args):
for i in range(5):
item = OneLineListItem(text='Gruppo ' + str(i))
self.ids.container_groups.add_widget(item)
class MyGroupScreen(Screen):
pass
sm = ScreenManager()
sm.add_widget(GroupsScreen(name='groups'))
sm.add_widget(MyGroupScreen(name='my_group'))
class DemoApp(MDApp):
def build(self):
self.theme_cls.primary_palette = "Red"
self.theme_cls.primary_hue = "500"
screen = Builder.load_string(screen_helper)
return screen
我想单击组屏幕中的项目并转到 MyGroupScreen。
OneLineListItem
class 实际上扩展了 ButtonBehavior
,因此您可以将其视为 Button
。只需将 on_press
或 on_release
方法分配给 OneLineListItem
:
class GroupsScreen(Screen):
def on_kv_post(self, *args):
for i in range(5):
item = OneLineListItem(text='Gruppo ' + str(i))
item.on_release = self.switch_to_my_groups
self.ids.container_groups.add_widget(item)
def switch_to_my_groups(self, *args):
self.manager.current = 'my_group'
我将您的 on_enter()
方法更改为 on_kv_post()
以确保 kv
规则已被执行(以便 ids
可用)。
另一个问题是线条:
sm = ScreenManager()
sm.add_widget(GroupsScreen(name='groups'))
sm.add_widget(MyGroupScreen(name='my_group'))
应删除这些行。他们尝试构建 GUI,但结果未被使用。该行:
screen = Builder.load_string(screen_helper)
然后再次重建GUI,这次真的用到了